gpt4 book ai didi

excel - 如何使用 VBScript 判断 Excel 2007 电子表格是否打开以及是谁打开的

转载 作者:行者123 更新时间:2023-12-01 19:33:28 24 4
gpt4 key购买 nike

如何判断 Excel 2007 电子表格是否已打开以及谁使用 VBScript 打开了该电子表格?

我正在尝试确定 Excel 工作簿当前是否由其他用户打开,并在我的脚本中返回该用户是谁。

我已经弄清楚由谁来确定工作簿当前是否打开。这是一种解决方法,但我基本上打开工作簿并检查它是否是只读的。效果很好;我已经测试过了。

我知道这是可能的,因为如果您通过浏览器打开该文件,Excel 就会向您提供打开该文件的用户。

这是我的代码(isWorkbookOpen.vbs):

Set objExcelTestWorkbook = CreateObject("Excel.Application")
objExcelTestWorkbook.DisplayAlerts = False 'doesn't display overwrite alert
testWorkbookFile = "I:\test_workbook.xlsx"
Set objBook = objExcelTestWorkbook.Workbooks.open(testWorkbookFile)

If objBook.ReadOnly Then
Wscript.echo "The file is read only"
Call EndScript
Else
Wscript.echo "The file is available"
Call EndScript
End If

Function EndScript
objExcelTestWorkbook.Workbooks.close
objExcelTestWorkbook.Quit
WScript.Echo "Closed " & testWorkbookFile
WScript.Quit
End Function

此外,我从命令行运行此命令:

cscript isWorkbookOpen.vbs

最佳答案

我的 Genious 同事提醒我有关 Excel 的“锁定”文件。打开 Excel 时,您会创建一个隐藏的系统文件,其中包含打开该文件的人员姓名。锁定文件在电子表格名称之前以“~$”开头。示例:

如果您有一个名为 testWorkbook.xlsx 的电子表格,它的锁定文件将是位于同一目录中的 ~$testWorkbook.xlsx

这也是检查文件是否打开的一种更快、更简单的方法,因为您实际上并没有像我之前那样打开文件。现在我只是检查锁定文件是否存在,如果存在,我检查谁是锁定文件的“所有者”,并且这将是当前打开电子表格的人。希望这对将来的人有所帮助!

这是我的代码,可以完美运行:

testWorkbookLockFile = "I:\~$test_workbook.xlsx"
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(testWorkbookLockFile) Then
WScript.Echo "The file is locked by " & GetFileOwner(testWorkbookLockFile)
Else
WScript.Echo "The file is available"
End If

Function GetFileOwner(strFileName)
'http://www.vbsedit.com/scripts/security/ownership/scr_1386.asp
Set objWMIService = GetObject("winmgmts:")
Set objFileSecuritySettings = _
objWMIService.Get("Win32_LogicalFileSecuritySetting='" & strFileName & "'")
intRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD)

If intRetVal = 0 Then
GetFileOwner = objSD.Owner.Name
Else
GetFileOwner = "Unknown"
End If
End Function

我想指出的是,我并没有编写 GetFileOwner 函数。我链接到了在该函数中获取该代码的网站。

此外,如果您没有将位置映射到电子表格并且它是通过网络进行的,则 UNC 路径将不起作用,您必须映射驱动器。这可以使用以下两行代码来完成:

Set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.MapNetworkDrive "Z:", "\\Server1\Share1"

希望有人能从中受益。我知道网上没有太多关于如何执行此操作的信息,因为我一直在寻找它!

关于excel - 如何使用 VBScript 判断 Excel 2007 电子表格是否打开以及是谁打开的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15555522/

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