我想读取 excel 表并使用 vbscript 显示内容。我还希望用户能够选择源目录,因此添加了 hta furteron。必须使用 ACE OLEDB 提供程序(请不要问,我知道这是生命的终结并且不可持续等,但我现在无法更改这一点),因此我从这里安装了 Microsoft Access Database Engine 2016 Redistributable(accessdatabaseengine_X64.exe):https: //www.microsoft.com/en-us/download/details.aspx ?id=54920 。此外,我在装有 Windows 11 的笔记本电脑上安装了 Microsoft 365 Apps for Enterprise(x64)。我创建了一个 excel 文件,其中包含 1 个工作表、2 列和几行内容,如下所示:
并将高亮的块命名为“namenblok”,并将文件保存为test.xlsx 。然后在同一目录中创建一个名为test.vbs的文件,内容如下:
Option Explicit
Dim fso : set fso = CreateObject("Scripting.FileSystemObject")
Dim g_sCfg : g_sCfg = fso.GetFolder(fso.GetAbsolutePathName(".")) & "\" & "test.xlsx"
Dim connectString : connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & g_sCfg & ";Extended Properties=""Excel 12.0;HDR=Yes;"";"
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
Dim objConnection, objRecordset
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")
objConnection.Open connectString
' wscript.sleep 1000
objRecordset.CursorLocation = adUseClient
On Error Resume Next
objRecordset.Open "SELECT * FROM namenblok" , objConnection, adOpenStatic, adLockOptimistic ' namenblok is een op naam gedefinieerde blok aan cellen
If Err.Number <> 0 Then
'error handling:
WScript.Echo Err.Number & " Srce: " & Err.Source & " Desc: " & Err.Description
Err.Clear
End If
Do While Not(objRecordset.EOF)
wscript.echo objRecordset("id") & " " & objRecordset("naam")
objRecordset.MoveNext
Loop
objRecordset.Close
objConnection.Close
当我运行它(例如,双击它)时,它会很好地逐行显示 Excel 表中的所有行,如下所示:
但是当更改为 .hta(html 应用程序)并仅添加如下脚本部分时:
<script language="VBScript">
Option Explicit
…
…
objConnection.Close
</script>
运行时显示:“找不到提供程序。它可能未正确安装。”并指向第 15 行:objConnection.Open connectString:
由于 html 限制发生变化,我可能需要调整 html 部分,但无法找到具体方法和操作。如有任何帮助,我将不胜感激!
发生该错误的原因是 HTA 在 32 位模式下运行,而独立 VBS 脚本在 64 位模式下运行。
HTA脚本默认以32位模式运行。VBS脚本默认以64位模式运行。
如果您打开提示并通过从 System32 运行并在命令行上提供 HTA 的完整路径
Cmd
以 64 位模式运行 HTA ,则您的 HTA 将正确运行。mshta.exe
例如:
注意:默认情况下,
C:\Windows\System32
位于搜索路径上,因此输入mshta
通常可以正常工作,但是为了确保您运行的是 64 位版本,无论路径设置如何,请指定 的完整路径C:\Windows\System32\mshta.exe
。注意:问题中发布的 VBSCript 代码使用
WScript.Echo
。必须将其更改为MsgBox
才能从 HTA 工作,因为主机是mshta.exe
而不是wscript.exe
或cscript.exe
。注意:问题中发布的 VBSCript 代码要求当前文件夹是脚本的文件夹(假设 XLSX 文件与脚本位于同一文件夹中)。否则,脚本将停止并出现错误:
The Microsoft Access database engine cannot open or write to the file
。为了确保当前文件夹是脚本的文件夹,可以在 HTA 文件中的 VBS 脚本顶部添加以下代码:如果 XLSX 文件与脚本位于不同的文件夹中,那么您只需将该文件夹明确设置为当前文件夹,如下所示: