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 回答