gpt4 book ai didi

excel - 在 VBScript 中调用 Excel 工作表

转载 作者:行者123 更新时间:2023-12-04 20:44:29 25 4
gpt4 key购买 nike

我有以下代码:

Option Explicit
Randomize
Dim a, song, album
a = Int((Rnd*195)+1)
song = "B" & a
album = "A" & a

Dim objApp, objWbs, objWorkbook, objSheet

Set objApp = CreateObject("Excel.Application")
Set objWbs = objApp.WorkBooks
objApp.Visible = False
Set objWorkbook = objWbs.Open("C:\Users\Name\Documents\Music.xlsx")
Set objSheet = objWorkbook.Sheets("Sheet1")

song = objSheet.Range(song).Value
album = objSheet.Range(album).Value

objWorkbook.Close False
objWbs.Close
objApp.Quit

Set objSheet = Nothing
Set objWorkbook = Nothing
Set objWbs = Nothing
Set objApp = Nothing

MsgBox("Album name: " & album & vbNewLine & "Song name: " & song)

它在 Excel 工作表“音乐”的第 1 行和第 195 行之间打印两个随机单元格。其中一个 - A 列中的一个 - 代表专辑,另一个代表歌曲。问题是返回结果需要相当长的时间,大约 20 秒。

我想知道是否有更有效的方法可以用来更快地获得结果。

最佳答案

我认为 Ansgar Wiechers' answer启动 Excel 是脚本中最慢的部分可能是正确的。您可以尝试使用 ADO 连接到 Excel 文件,就好像它是一个数据库一样。这将避免启动 Excel:

Option Explicit

Randomize
Dim conn, rst, song, album

Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Users\Name\Documents\Music.xlsx;" & _
"Extended Properties='Excel 12.0 Xml;HDR=NO';"

' Select a random record; reference https://stackoverflow.com/a/9937263/249624
' Asc(album) is just a way to get some numeric value from the existing data
Set rst = conn.Execute("SELECT TOP 1 F1 AS album, F2 as song FROM [Sheet1$] ORDER BY Rnd(-(100000*Asc(F1))*Time())")

If rst.EOF Then
song = "[NO RECORDS]"
album = "[NO RECORDS]"
Else
song = rst("song").Value
album = rst("album").Value
End If

MsgBox("Album name: " & album & vbNewLine & "Song name: " & song)

这里的一个可能问题是 VBScript 默认使用 64 位版本的 wscript.exe 运行,而 64 位 ACE.OLEDB 仅在您安装了 64 位版本的 Office 2010 或更高版本时才可用。不过,这可以通过使用 32 位版本的 wscript.exe 运行脚本来解决(例如,参见 How do I run a VBScript in 32-bit mode on a 64-bit machine? )。

如果您决定走这条路并且可以控制输入 Excel 文件,我建议您在电子表格中添加标题行并更改 HDR=NOHDR=YES在连接字符串中。这样,您可以在查询中按名称引用列(例如 SELECT TOP 1 album, song ... ),而不是依赖“F1”语法。

关于excel - 在 VBScript 中调用 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22279384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com