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

Sur*_*nti 6 python python-3.x openpyxl

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

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

are*_*192 6

如果您是 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
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您想使用活动工作簿而不是这样写: ```python workbook = ExcelApp.Workbooks.Open(r"&lt;FILE_PATH&gt;") ``` 您可以这样写: ```python workbook = ExcelApp.ActiveWorkbook ` `` 这代表活动工作簿,或者换句话说,您当前光标所在的工作簿。 (2认同)

Gui*_*des 2

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

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

...

wb.save('meanwhile.xlsm')
Run Code Online (Sandbox Code Playgroud)

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

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

单击“使用情况”选项卡。

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