2

自動化された方法で Excel ドキュメント (ファイル) を PDF に変換するにはどうすればよいですか? ここで見つかったソリューションを Excelに適応させようとしています。これまでのところ、私はこれを持っています:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var docPath = WScript.Arguments(0);
docPath = fso.GetAbsolutePathName(docPath);

var pdfPath = docPath.replace(/\.xls[^.]*$/, ".pdf");
var objExcel = null;

try
{
    WScript.Echo("Saving '" + docPath + "' as '" + pdfPath + "'...");

    objExcel = new ActiveXObject("Excel.Application");
    objExcel.Visible = false;

    var objExcel = objExcel.Workbooks.Open(docPath);

    var wdFormatPdf = 17;
    objExcel.SaveAs(pdfPath, wdFormatPdf);
    objExcel.Close();

    WScript.Echo("Done.");
}
finally
{
    if (objExcel != null)
    {
        objExcel.Quit();
    }
}

私はこの出力を得ます:

Saving 'somefile.xlsx' as 'somefile.pdf'...
Done.
..\SaveXLSXAsPDF.js(27, 9) (null): The object invoked has disconnected from its clients.

PDF ファイルが作成されましたが、無効であり、リーダーで開くことができません。おそらくフォーマット 17 は Excel に適していないと思います。誰かが正しい番号を知っているか、これを機能させる方法を知っていますか?

編集:ここで正しい番号(57) についての言及を見つけましたが、次のエラーが発生しました:

r:\Web\Roman\SaveXLSXAsPDF.js(27, 13) Microsoft JScript runtime error: Class doesn't support Automation
4

2 に答える 2

4

15 行目で objExcel を壊しています:

var objExcel = objExcel.Workbooks.Open(docPath);

これらのコード行では、別の変数を使用する必要があります。たとえば、次のようになります。

var objWorkbook = objExcel.Workbooks.Open(docPath);

var wdFormatPdf = 57;
objWorkbook.SaveAs(pdfPath, wdFormatPdf);
objWorkbook.Close();
于 2013-03-27T23:15:17.617 に答える
3

.ExportAsFixedFormatの代わりにプロパティを使用してみてください.SaveAs。最初のものは Excel で PDF ファイルを作成するのに適していますが、PDF 形式をサポートしていない SaveAs には適していません。

次のようなものが必要になると思います。

objExcel.ExportAsFixedFormat(0, pdfPath)
于 2013-03-27T23:17:13.577 に答える