【发布时间】: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