【发布时间】:2009-03-06 08:58:41
【问题描述】:
我想使用 VBA 从 Excel 调用 Perl 脚本。我使用了一个shell命令。我也使用了下面的代码:
Function Chk()
Dim RetVal
RetVal = Shell("C:\Perl\bin\Hello.pl", 1)
End Function
但是上面的函数并没有运行文件。有什么错误吗?
还有其他方法可以使用 Excel 调用 Perl 脚本或外部程序吗?
【问题讨论】:
我想使用 VBA 从 Excel 调用 Perl 脚本。我使用了一个shell命令。我也使用了下面的代码:
Function Chk()
Dim RetVal
RetVal = Shell("C:\Perl\bin\Hello.pl", 1)
End Function
但是上面的函数并没有运行文件。有什么错误吗?
还有其他方法可以使用 Excel 调用 Perl 脚本或外部程序吗?
【问题讨论】:
看看 ActiveState 的 Perl 扩展。他们有一个“ActivePerl”DLL,它将 Perl 解释器作为一个 ActiveX 组件运行,应该允许与 Excel 无缝集成。
此外,它们的 OLE 扩展允许 Perl 访问完整的 Excel OLE 对象 模型,以便您可以非常精确地操作电子表格。
【讨论】:
您需要支付以下费用:
c:\perl\bin\perl.exe Hello.pl
让它运行。
【讨论】:
您也可以将此行添加为脚本中的第一行:
#!c:\perl\bin\perl.exe
【讨论】:
Excel 的 Shell() 函数可能会忽略文件关联。你几乎肯定需要说更多类似的话:
Function Chk()
Dim RetVal
Chk = Shell("C:\Perl\bin\perl.exe C:\Perl\bin\Hello.pl", 1)
End Function
达到你想要的效果。需要注意的两个更改首先是 perl.exe 的显式调用,其次是您编写的函数中的轻微语法错误。
请注意,如果 perl.exe 的路径或脚本的路径(或脚本的任何其他参数)中有空格,那么您将需要形成一个包含双引号字符的字符串来引用它们,例如:
Function Chk()
Dim RetVal
Chk = Shell("C:\Perl\bin\perl.exe ""C:\Some path\with spaces\Hello.pl""", 1)
End Function
会成功的。
【讨论】: