【问题标题】:How to Write a VBA Shell Script to Run a PHP Script on Variable Files如何编写 VBA Shell 脚本以在变量文件上运行 PHP 脚本
【发布时间】:2019-01-28 23:05:12
【问题描述】:

我正在尝试编写一个 shell 脚本,该脚本将同时在多个文件上运行 PHP 脚本(这需要在 json 文件上使用 exe 文件和 php 文件)。在这种情况下,json 文件是唯一可变的。

如果我手动使用命令提示符,这是我需要输入的命令以达到预期的结果-

C:/Users/myusername/Desktop/XAMPP/php/php.exe transcript.php transcribedfile.json

我的工作表的单元格 G2 包含 json 文件名,这就是我在第二行激活它的原因。一旦我可以让 shell 脚本工作,我将在一个循环中编码,循环遍历 G 列中的所有值,从 G2 开始,直到 ActiveCell 值为“”。

这是我尝试过的-

Sub Shell()
Range("G2").Activate
Dim strProgramName As String
Dim strArgument As String

strProgramName = "C:\Users\myusername\Desktop\XAMPP\php\php.exe transcript.php " & ActiveCell.Value
strArgument = "/G"

Call Shell("""" & strProgramName & """ """ & strArgument & """", vbNormalFocus)

End Sub

当我运行 sub 时,我收到“找不到文件”错误。我测试了strProgramName,发现如果我在那时切断代码,我可以让php.exe运行,但我需要它来识别整个字符串。

欢迎任何想法。提前谢谢你。

【问题讨论】:

  • php.exe 如何知道在哪里可以找到这两个文件?您可以考虑传递完整路径(如果路径可能包含空格,请不要引用路径)
  • 设置你的PHP路径环境值,然后你可以在没有路径的情况下调用php。这可能不会解决问题,但它会让生活更轻松。
  • @TimWilliams-它们都位于同一个目录中。我将如何包含完整路径?抱歉,我对此非常陌生。
  • @ArtisticPhoenix - 目前,我没有这台计算机的管理员权限,所以我无法更改这些值。
  • "same directory" as what - 可执行文件,还是你的工作簿?

标签: php vba excel shell command-line-arguments


【解决方案1】:

我会这样做:

Const PHP_PATH As String = "C:\Users\myusername\Desktop\XAMPP\php\"
Dim strProg As Variant

strProg = """{pth}php.exe"" ""{pth}transcript.php"" ""{pth}" & _
          Range("G2").Value & """ \G"

strProg = Replace(strProg, "{pth}", PHP_PATH)
Debug.Print strProg '<< pass this to Shell

【讨论】:

  • 难以置信,我对你的技能感到敬畏。那工作得很好。我现在唯一关心的是包含一个循环,它将循环遍历 G 列中的每个值,从 2 开始,直到该值为空白。我尝试自己编写代码,但最终创建了一个无限循环。我将如何使用您的方法来做到这一点?非常感谢!
  • 没关系,我自己想通了。我刚刚对最终值进行了不正确的编码。再次感谢,我会将您的答案标记为正确。
  • 仅供参考,有很好的库可以在 VBA 中解析 JSON。例如这个很容易使用:github.com/VBA-tools/VBA-JSON
  • 谢谢!有机会我会调查的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 2011-06-24
  • 2019-12-12
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多