使用 pandas 和 XlsxWriter 编写到现有的 .xlsm 文件。

3
我想将一个数据框写入一个已经存在内容的.xlsm文件中。 将pandas数据框写入xlsm文件(启用宏的Excel)描述了如何写入新文件,但我想要在现有的.xlsm文件中添加一个新工作表。当我使用以下代码(与问题中相同)时:
import pandas as pd

df = pd.DataFrame({'First' : [5, 2, 0, 10, 4], 
                   'Second' : [9, 8, 21, 3, 8]})

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1')

workbook  = writer.book
workbook.filename = 'test.xlsm'
workbook.add_vba_project('./vbaProject.bin')

df.to_excel(writer, sheet_name='Sheet1') #This is the df I'm trying to add to the sheet
writer.save()

它会覆盖原始内容,现有的.xlsm文件只有新添加的工作表。
我无法完全弄清如何修改上述链接问题中的代码以考虑现有文件。
谢谢。
*我已提取vbaProject.bin,如此处所述:https://xlsxwriter.readthedocs.io/working_with_macros.html*
1个回答

2
我使用XlsxWriter的解决方法也遇到了同样的问题。我认为您需要将已经存在的工作表复制/粘贴到writer.sheets中。也许修复它的一种方法是添加这样一行代码:
writer.sheets = {ws.title: ws for ws in writer.book.worksheets}

但是这种语法在 engine='xlsxwriter' 下不起作用。

要将 DataFrame 添加到 xlsm 工作表中,我所做的只是:

import pandas
import openpyxl

writer = pandas.ExcelWriter(excel_file_path, engine='openpyxl')

writer.book = openpyxl.load_workbook(excel_file_path, keep_vba= True)
writer.sheets = {ws.title: ws for ws in writer.book.worksheets}

dataframe_to_insert.to_excel(writer, sheet_name= sheet_destination)

workbook = writer.book
workbook.filename = excel_file_path

writer.save()
writer.close()

看起来 keep_vba=True 对我有用(Python 3.8.x)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接