【问题标题】:Run Node.js using VBA使用 VBA 运行 Node.js
【发布时间】:2017-06-08 07:04:43
【问题描述】:

总体目标是在 JavaScript 文件上运行 Node.js 并使用 MS Access VBA 抓取输出。这是我用来测试的 JavaScript 文件:

// C:\Users\micha\OneDrive\AppAcademy\Interview Prep\tst.js

var fs = require("fs");
var outputFile = "testLog.txt";

fs.writeFile(outputFile, new Date());

当我按如下方式从命令提示符运行它时,它会在 Interview Prep 文件夹中生成一个带有时间戳的 testLog.txt 文件。

C:\Users\micha\OneDrive\AppAcademy\Interview Prep>node tst.js

现在我想在 Access 应用程序中使用 VBA 触发同样的事情。我试过两种方法。第一个是快速而肮脏的,但我的理解是我可以用 StdOut 来充实它以进行刮擦。它使用 WScript.Shell:

Private Sub runShellTest_Click()
    Dim objShell As Object, objExec As Object
    Set objShell = CreateObject("WScript.Shell")
    Set objExec = objShell.Exec("C:\Program Files\nodejs\node.exe C:\Users\micha\OneDrive\AppAcademy\Interview Prep\tst.js")
End Sub

当我运行它时,命令提示符会在屏幕上短暂闪烁,但我没有得到新的 testLog.txt。

我尝试的另一种方法更快更脏:

Private Sub runShellTest_Click()
    MsgBox (Shell("C:\Program Files\nodejs\node.exe C:\Users\micha\OneDrive\AppAcademy\Interview Prep\tst.js", vbNormalFocus))
End Sub

再次,命令提示符短暂闪烁,并且没有新的 testLog.txt。但是,消息框按预期显示了任务 ID,所以我猜……发生了什么事?

感谢任何帮助!

【问题讨论】:

  • 没有理由写入文件,只需写入标准输出并从 vba 中捕获即可。
  • 我应该澄清一下:使用 JavaScript 编写文件只是一种检查以确保 JavaScript 正在运行的方法。我真正想做的是从给定的 JavaScript 文件中抓取所有 console.log 输出,我尝试的第一件事是捕获 objExec.StdOut。当这不起作用时,我想看看问题是 JavaScript 没有运行还是 console.logs 没有被捕获。到目前为止,它看起来像前者。
  • @DusteD -- 怎么样?

标签: javascript node.js vba ms-access wsh


【解决方案1】:

当您像这样运行它时,该文件将在 Access 可执行文件的位置生成。请检查您的 Access 安装位置,您应该在那里找到该文件。在节点代码中,您还必须传递需要生成文件的路径。

【讨论】:

  • 我查看了msaccess.exe的位置,即C:\Program Files (x86)\Microsoft Office\root\Office16。文件不存在。我最初在我的节点代码中也有一个 var outputFile 的绝对路径,但是当从命令提示符手动运行它时,它只需要一个文件名就可以正常工作,因为我的目标是 tst.js 所在的同一个目录。
  • Wscript.ScriptFullName 将为您提供脚本当前执行日志文件的路径,日志文件可能在那里或其父文件夹中。检查并告诉我。
【解决方案2】:

我一直在尝试成功发送 xmlhttp 请求。 您需要将 json 转换为 vba 字典。 有一个 vba 类可用于转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2017-02-08
    • 2021-10-26
    相关资源
    最近更新 更多