在Python中使用os.startfile()以只读方式打开Excel文件

vkc1a9a2  于 2023-05-30  发布在  Python
关注(0)|答案(1)|浏览(305)

我做了一个工具,让我的同事打开我们经常使用的Excel文件。有时同事只需要将其打开为只读。如果我使用os.startfile(),而没有其他人打开过这个文件,那么你将以Writeable打开这个文件,但是下一个人只能以ReadOnly打开这个文件。我希望他们有一个选项,以打开文件为只读,无论它是否已经开放或没有。我知道Excel有一个选项可以以只读方式打开文件。也许可以用Python实现这个选项?
我在谷歌上搜索过,但我发现的最多的东西是关于在openpyxl或xlwings中阅读excel文件的。但是没有找到任何关于使用os.startfile()以只读方式打开它的信息。有没有人能帮我找到正确的答案?

92dk7w1h

92dk7w1h1#

使用/r开关,Excel将以只读方式启动电子表格,例如excel.exe /r "c:\My Folder\book1.xlsx"
https://support.microsoft.com/en-us/office/command-line-switches-for-microsoft-office-products-079164cd-4ef5-4178-b235-441737deb3a6#Category=Excel
不要将电子表格的文件名作为第一个参数传递给os.startfile,而是将Excel传递给它,然后传递正确的参数使其只读,然后是用双引号括起来的文件名。

os.startfile('Excel', arguments='/r "C:\spreadsheet file 1.xlsx"')

这与在Windows命令提示符中输入start Excel /r "C:\spreadsheet file 1.xlsx"相同。
或者,您可以手动获取Excel的路径,并使用winregsubprocess.Popen使用正确的参数运行它:

# Step 1 - get the path of EXCEL.EXE (first method)
# This method queries the registry just once, which for me returns
# "C:\Program Files\Microsoft Office\Office15\EXCEL.EXE" "%1"
# But we only need the path without quotes 
key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"Applications\EXCEL.EXE\shell\open\command")
excel_open_command = winreg.QueryValueEx(key, "")[0]
winreg.CloseKey(key)

end = excel_open_command.lower().rindex(".exe") + len(".exe")
excel_exe_path = excel_open_command[:end].replace('"', "")

# Step 1 - get the path of EXCEL.EXE (second method)
# This method queries the registry twice, which for me returns the short name
# C:\PROGRA~1\MICROS~2\Office15\EXCEL.EXE
key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"Excel.Sheet\CLSID")
clsid = winreg.QueryValueEx(key, "")[0]
winreg.CloseKey(key)

key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, rf"CLSID\{clsid}\LocalServer32")
excel_exe_path = winreg.QueryValueEx(key, "")[0]
winreg.CloseKey(key)

# Step 2 - run Excel with the read-only switch followed by the spreadsheet filename
subprocess.Popen([excel_exe_path, "/r", r"C:\Spreadsheet.xlsx"])

相关问题