使用 Python 实时更新 Excel 工作表

新手上路,请多包涵

在 Excel 中打开电子表格时,是否可以实时更新电子表格?我有一个名为 Example.xlsx 的工作簿,它在 Excel 中打开,我有以下 python 代码,它试图用字符串“ID”更新单元格 B1:

 import openpyxl

wb = openpyxl.load_workbook('Example.xlsx')
sheet = wb['Sheet']
sheet['B1'] = 'ID'

wb.save('Example.xlsx')

在运行脚本时出现此错误:

PermissionError: [Errno 13] Permission denied: 'Example.xlsx'

我知道它是因为该文件当前在 Excel 中打开,但想知道是否有其他方法或模块可用于在打开时更新工作表。

原文由 West 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

我实际上已经弄清楚了,使用 xlwings 非常简单。以下代码打开一个名为 Example.xlsx 的现有 Excel 文件并实时更新它,在本例中,在您运行脚本时立即将值 45 放入单元格 B2 中。

 import xlwings as xw

wb = xw.Book('Example.xlsx')
sht1 = wb.sheets['Sheet']
sht1.range('B2').value = 45

原文由 West 发布,翻译遵循 CC BY-SA 4.0 许可协议

您已经弄清楚为什么不能使用 openpyxl 写入 .xlsx 文件:它在 Excel 打开时处于锁定状态。您不能直接写入它,但可以使用 win32com 与通过其 COM 接口运行的 Excel 副本进行通信。

您可以从 https://github.com/mhammond/pywin32 下载 win32com

像这样使用它:

 from win32com.client import Dispatch
xlApp = Dispatch("Excel.Application")
wb=xlApp.Workbooks.Item("MyExcelFile.xlsx")
ws=wb.Sheets("MyWorksheetName")

此时, ws 是对可以更改的工作表对象的引用。您取回的对象不是 Python 对象,而是围绕 VBA 对象的薄 Python 包装器,它们遵循自己的约定,而不是 Python 的约定。

这里有一些有用但相当旧的面向 Python 的文档:http: //timgolden.me.uk/pywin32-docs/contents.html

这里有对象模型的完整文档: https ://msdn.microsoft.com/en-us/library/wss56bz7.aspx 但请记住它是针对 VBA 程序员的。

原文由 BoarGules 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题