【发布时间】:2019-11-07 14:16:56
【问题描述】:
我正在尝试将 Excel 文件从 NodeJS 应用程序转换为 PDF。当我在命令行中启动 Node 时它可以工作,但是当我通过 NSSM 或直接使用任务计划程序将 app.bat 作为 Windows 服务启动时,它不再工作了。
使用下面的脚本,我只能看到 log.txt 中的第一行,即程序参数。如果一切顺利,我应该会看到 0,然后是 1 和 2。遗憾的是,当 Node 在后台运行时,我没有任何数字,所以我猜问题是 CreateObject("Excel.Application") 但我不知道为什么以及如何解决它。
VBScript:
Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="C:\Users\admin\Documents\Projects\tools\log.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write Wscript.Arguments.Item(0) & " | " & WScript.Arguments.Item(1) & vbCrLf
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
objFile.Write "0" & vbCrLf
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
objFile.Write "1" & vbCrLf
oBook.ExportAsFixedFormat xlTypePDF, WScript.Arguments.Item(1)
objFile.Write "2" & vbCrLf
oBook.Close True
NodeJS:
const {exec} = require('child_process');
exec('"' + Meteor.settings.directories.tools + 'convertToPDF.vbs" "' + outputServerFilePathChild + '.xlsx" "' + outputServerFilePathChild + '.pdf"', (err, stdout, stderr) => {
if (err) {
console.log(stderr);
reject(new Error(stderr));
} else {
if (fs.existsSync(outputServerFilePathChild.replace(/ /g, "%20") + ".pdf")) {
console.log('rename "' + outputServerFilePathChild.replace(/ /g, "%20") + '.pdf" "' + outputServerFilePathChild + '.pdf"');
exec('rename "' + outputServerFilePathChild.replace(/ /g, "%20") + '.pdf" "' + outputServerFilePathChild + '.pdf"', (err, stdout, stderr) => {
console.log("File generated: " + outputServerFilePathChild + ".pdf");
resolve(outputClientFilePathChild + ".pdf");
});
} else {
console.log("File generated: " + outputServerFilePathChild + ".pdf");
resolve(outputClientFilePathChild + ".pdf");
}
}
});
我也尝试过这样的事情:
const child2 = spawn('start', [
'"PDFConverter"',
'cscript',
'"C:\\Users\\admin\\Documents\\Projects\\tools\\convertToPDF.vbs"',
'"C:\\Users\\admin\\Documents\\Projects\\reports\\admin\\rebates\\customer1 2019-09-30.xlsx"',
'"C:\\Users\\admin\\Documents\\Projects\\reports\\admin\\rebates\\customer1 2019-09-30.pdf"'
], {
shell: true,
windowsHide: true,
});
但是,它也不起作用。有人有想法吗?
编辑:这个问题似乎无法解决。很多年前有人问过同样的问题,至今没有答案……
【问题讨论】:
-
您的错误可能出现在
objFile.Write Wscript.Arguments.Item(0) & " | " & WScript.Arguments.Item(1) & vbCrLf行上,可能是命令行参数没有出现在脚本中。Set oExcel = CreateObject("Excel.Application")很好。 -
在 log.txt 中我写了第一行,我添加了这一行来调试我的脚本。它以前不起作用,这就是我添加这些行的原因。所以问题不在这里。
标签: node.js vbscript child-process background-task