【发布时间】:2017-12-08 15:55:23
【问题描述】:
我在 VBA 的范围内运行 Gnuplot,它运行得非常好。我能够使用 GNUPLOT 和 Word VBA 制作一整本书,其中包含大约一百张图表。 (使用 Excel 图表,我可以得到大约四个)
有一个小问题 - 在 VBA 下运行时,STDERR 消失了,或者没有被创建。没有诊断。
鉴于以下小型 GNUPLOT 脚本,
set key bmargin left horizontal Right noreverse enhanced autotitle box lt black linewidth 1.000 dashtype solid
set samples 800, 800
set title "Simple Plots"
set title font ",20" norotate
DEBUG_TERM_HTIC = 119
DEBUG_TERM_VTIC = 119
plot [-30:20] sin(x*20)*atan(x)
我的 VBA 代码将其写入临时文件并尝试运行它。 VBA 生成
"C:\temp\Gnuplot\bin\gnuplot.exe" C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E0.txt 2>"C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E2.err"
然后使用 Windows Shell 运行它,调用方式如下:
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
然后
wsh.Run x, 0, True ' x contains the generated GNUPLOT expression
GNUPLOT 完美执行。
在 GNUPLOT 表达式中,第一项是 GNUPLOT 程序的位置,在我的系统上恰好是 "C:\temp\Gnuplot\bin\gnuplot.exe"。第二个文件是在微软官方位置C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E0.txt临时生成的。最后是 STDERR 的位置,2>"C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E2.err",其中 2> 表示这是 STDERR,而不是正常的输出 STDOUT。
现在假设我在 GNUPLOT 源代码中引入了故意错误,我希望写入的错误文件包含类似
scooby doo where are you?
^
"C:\Users\VVKozlov\AppData\Local\Temp\gnuEC55.txt", line 4: invalid command
在 VBA 之外使用通常的 CMD.EXE 执行时,STDERR 文件会按预期创建。
当使用 Windows Shell 在 VBA 范围内执行时,不会创建 STDERR 文件。
如何让这个 STDERR 文件在 VBA 下生成?
【问题讨论】:
-
像
CmdLine = "CMD /S/C """ & CmdLine & """"一样包装整个命令行。这些是神奇的词。 -
谢谢,本。就是那些神奇的额外引号。
-
在几位同事的坚持下,我添加了这个作品的一个版本,但作为 Excel 插件,添加到SourceForge。
标签: vba excel vbscript gnuplot ms-word