如何使用 Python 写入打开的 Excel 文件?

新手上路,请多包涵

我正在使用 openpyxl 写入工作簿。但是需要关闭该工作簿才能对其进行编辑。有没有办法写入打开的 Excel 工作表?我想要一个使用命令行运行 Python 代码并填充单元格的按钮。

我构建的当前过程是使用 VBA 关闭文件,然后 Python 写入并再次打开它。但这是低效的。这就是为什么我需要一种写入打开文件的方法。

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

阅读 767
2 个回答

我通过执行以下操作解决了这个问题:创建一个中间 excel 文件以从 python 接收数据,然后在该文件和主文件之间创建一个连接。 Excel 有一个工具可以自动刷新从另一个工作簿导入的数据。看这个 LINK

 wb = openpyxl.load_workbook(filename='meanwhile.xlsm', read_only=False, keep_vba=True)

...

wb.save('meanwhile.xlsm')

按顺序打开您的主 Excel 文件:

在“数据”选项卡上,创建与“同时”工作簿的连接,然后在“连接”组中,单击“刷新”旁边的箭头,然后单击“连接属性”。

单击使用选项卡。

选中刷新间隔复选框,然后输入每次刷新操作之间的分钟数。

原文由 Guilherme Henrique Mendes 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您是 Windows 用户,有一种非常简单的方法可以做到这一点。如果我们使用 Win32 库,我们可以利用内置的 Excel 对象 VBA 模型。

现在,我不确定您的数据究竟是什么样子或您希望它在工作簿中的什么位置,但我假设您希望它出现在您打开工作簿时出现的工作表上。

例如,假设我有一个 Panda 的 DataFrame,我想将其写入打开的 Excel 工作簿。它想要以下内容:

 import win32com.client
import pandas as pd

# Create an instance of the Excel Application & make it visible.
ExcelApp = win32com.client.GetActiveObject("Excel.Application")
ExcelApp.Visible = True

# Open the desired workbook
workbook = ExcelApp.Workbooks.Open(r"<FILE_PATH>")

# Take the data frame object and convert it to a recordset array
rec_array = data_frame.to_records()

# Convert the Recordset Array to a list. This is because Excel doesn't recognize
# Numpy datatypes.
rec_array = rec_array.tolist()

# It will look something like this now.
# [(1, 'Apple', Decimal('2'), 4.0), (2, 'Orange', Decimal('3'), 5.0), (3, 'Peach',
# Decimal('5'), 5.0), (4, 'Pear', Decimal('6'), 5.0)]

# set the value property equal to the record array.
ExcelApp.Range("F2:I5").Value = rec_array

同样,我们必须牢记很多事情,比如我们希望将其粘贴到哪里、数据的格式如何以及一大堆其他问题。 但是,归根结底,如果您是 Windows 用户,则可以使用 Python 写入打开的 Excel 文件。

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

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