如何使用从 Web 调用的 VBScript 打开和打印 Word 文档?

如何使用从 Web 调用的 VBScript 打开和打印 Word 文档?

我工作的大学允许学生在冬季登记他们的自行车以便室内存放。这可以通过网站完成。在流程结束时,连接到网络的 DYMO 标签打印机将打印出一张将贴在自行车上的标签。

具体过程如下:

  1. 工作人员将用户和自行车数据输入到网络表单中。(这有效)
  2. 用户和自行车数据存储在 Oracle 数据库中。(这有效)
  3. 在 Web 服务器上运行的 PHP 将用户和自行车数据保存到 CSV 文件中。(有效)
  4. 在 Web 服务器上运行的 PHP 调用 VBScript。(可行)
  5. VBScript 打开一个 Word 文档,加载 CSV 数据并打印标签。(问题)

现在,VBScript 可以正常工作。如果我手动运行 VBScript,它将打开 Word、加载 CSV 数据、打印标签并关闭 Word。

同样,如果我在 VBScript 末尾添加一些代码来编写 .txt 文件(出于测试目的),无论我手动运行脚本还是允许网站运行它,都会写入文本文件。

因此,我怀疑存在权限问题,导致 VBScript 在从 Web 运行时无法访问 Word 和/或打印机。关于如何解决此问题,有什么建议吗?

网络服务器是运行 XAMPP 的 Windows Server 2003。

如果有帮助的话,下面是调用 VBScript 的 PHP 行:

exec('wscript "D:\CSWebHousing\wwwroot\portal2\bikes\testcode.vbs"');

以下是 VBScript 的相关部分:

Sub TestCode
Set ws = WScript.CreateObject("WScript.Shell")

OFFICE_PATH = "C:\path_to\Office12"

    file_to_open = CHR(34) & "D:\path_to\Label.doc" & CHR(34)

ws.Run CHR(34)& OFFICE_PATH & "\winword.exe" & CHR(34) & file_to_open, 0, false 


'These lines tab and enter past a dialog box
intTime = 3000
Wscript.Sleep(intTime)
ws.Sendkeys "{TAB}"
intTime = 500
Wscript.Sleep(intTime)
ws.Sendkeys "{TAB}"
intTime = 500
Wscript.Sleep(intTime)
ws.Sendkeys "{ENTER}"
intTime = 4000
Wscript.Sleep(intTime)
ws.Sendkeys "%fx"
End Sub

我认为这是一个权限问题,但如果有任何想法我将不胜感激。

谢谢。

答案1

已经使用 vbscript 完成了大量脚本安装......

我认为问题出在 SendKey 上。

如果您以个人身份启动 vbscript,SendKey 非常有用。当您以某种自动化过程启动脚本时,焦点有时会丢失。

碰巧的是,这里有一个关于如何使用 SendKey 保持窗口焦点的方便的 Stack Overflow 问题: https://stackoverflow.com/questions/16173315/windows-batch-file-not-working-consistently

我希望这能有所帮助。

答案2

既然您已经假设这是问题所在——我认为您应该检查权限是否存在问题。

如果 php 脚本正在启动 VB 脚本,则运行 Web 服务器的用户将运行 VB 脚本。然后,该用户需要访问脚本位置和 csv 文件。最简单的测试是允许所有人访问这两个文件(测试成功后必须恢复!)- 然后您就知道这是否是权限问题。

您还可以单独测试问题的两个部分:

  • 修改脚本以打印出任何文本 - 只是为了看看该网站是否能够启动 VB 脚本。
  • 尝试在网站上输出 csv 文件的内容,看看是否可以使用脚本访问该文件。

相关内容