Я пытаюсь преобразовать файл Excel в PDF из приложения NodeJS. Он работает, когда я запускаю Node в командной строке, но когда я запускаю свой app.bat в качестве службы Windows через NSSM или непосредственно с помощью планировщика задач, он больше не работает.
С помощью приведенного ниже сценария я могувидеть только первую строку в 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,
});
Однако это тоже не работает. У кого-нибудь есть идея?