在后台模式下从Nodejs执行VBS(任务计划程序或Windows服务)

问题描述 投票:0回答:1

我正在尝试从NodeJS应用程序将Excel文件转换为PDF。当我在命令行中启动Node时,它可以工作,但是当我通过NSSM或直接使用Tasks Scheduler作为Windows服务启动app.bat时,它不再起作用。

使用下面的脚本,我只能在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,
            });

但是,它也不起作用。有人有主意吗?

EDIT:这个问题似乎无法解决。许多年前有人问过同样的问题,但仍然没有答案...

node.js vbscript child-process background-task
1个回答
0
投票
Excel有关,因此不是

VBScript或NodeJS。我用EdgeJsC#中做同样的事情,但我遇到了同样的问题。

您可以使用其库来编辑/创建Open XML文件,但不能以PDF格式保存或在服务器模式下使用任何宏。Microsoft回答:

https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office?wa=wsignin1.0%3Fwa%3Dwsignin1.0

如果您使用服务器端解决方案中的Office应用程序,应用程序将缺少许多运行所需的功能成功。

CreateObject函数和CoCreateInstance函数返回一个以下运行时错误消息,并且无法针对自动化...... ... ...

© www.soinside.com 2019 - 2024. All rights reserved.