Python 如何使用 ExcelWriter 写入现有工作表
Posted
技术标签:
【中文标题】Python 如何使用 ExcelWriter 写入现有工作表【英文标题】:Python How to use ExcelWriter to write into an existing worksheet 【发布时间】:2016-04-17 03:20:09 【问题描述】:我正在尝试使用 ExcelWriter 将一些信息写入/添加到包含多个工作表的工作簿中。 第一次使用该功能时,我正在使用一些数据创建工作簿。在第二次通话中,我想将一些信息添加到工作簿中不同位置的所有工作表中。
def Out_Excel(file_name,C,col):
writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
for tab in tabs: # tabs here is provided from a different function that I did not write here to keep it simple and clean
df = DataFrame(C) # the data is different for different sheets but I keep it simple in this case
df.to_excel(writer,sheet_name = tab, startcol = 0 + col, startrow = 0)
writer.save()
在主代码中,我使用不同的 col 两次调用此函数,以在不同的位置打印出我的数据。
Out_Excel('test.xlsx',C,0)
Out_Excel('test.xlsx',D,10)
但问题是这样做的输出只是函数的第二次调用,就好像函数会覆盖整个工作簿一样。我想我需要加载在这种情况下已经存在的工作簿? 有什么帮助吗?
【问题讨论】:
是否要将D
附加到C
在同一张表中?或者您想向现有工作簿添加新工作表?如果你想在同一张表中追加,你真的应该在熊猫中追加。
How to write to an existing excel file without overwriting data (using pandas)?的可能重复
【参考方案1】:
使用openpyxl
中的load_book
- 请参阅xlsxwriter 和openpyxl 文档:
import pandas as pd
from openpyxl import load_workbook
book = load_workbook('test.xlsx')
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, sheet_name='tab_name', other_params)
writer.save()
【讨论】:
感谢您的评论。按照您的建议,我必须第一次创建工作簿,然后在需要时使用 load_book。我这样做了,但出现以下错误:TypeError: copy() got an unexpected keyword argument 'font' 见***.com/questions/30102232/… 只需仔细检查一下,pandas 0.17.1
和 openpyxl 2.3.1
对我来说效果很好。
感谢 Stefan,我已经为此苦苦挣扎了一段时间。我尝试了几次,我得到了一个错误,正如我在之前的 cmets 中提到的那样。我正在使用 openpyxl 2.3.1 和 pandas 0.16.2 。我想我需要找到另一个解决方案。无论如何感谢您的评论
@Stefan 我只是posted a question,最近偶然发现了这篇文章。你能解释一下writer.book = book
正在做什么以及为什么这允许你写入现有的工作簿吗?【参考方案2】:
您也可以尝试使用以下方法来创建您的 Excel 电子表格:
import pandas as pd
def generate_excel(csv_file, excel_loc, sheet_):
writer = pd.ExcelWriter(excel_loc)
data = pd.read_csv(csv_file, header=0, index_col=False)
data.to_excel(writer, sheet_name=sheet_, index=False)
writer.save()
return(writer.close())
试试这个,让我知道你的想法。
【讨论】:
我认为这实际上并不能满足问题的要求。【参考方案3】:Pandas version 0.24.0 添加了 mode
关键字,它允许您附加到 excel 工作簿,而无需跳过我们过去必须做的麻烦。只需使用 mode='a'
将工作表附加到现有工作簿。
来自the documentation:
with ExcelWriter('path_to_file.xlsx', mode='a') as writer:
df.to_excel(writer, sheet_name='Sheet3')
【讨论】:
有点不清楚 OP 是否想将工作表附加到现有工作簿,但这就是这样做的。如果Sheet3
已存在于现有工作簿中,则会被df
的内容覆盖。
什么是df?我在pandas网站上看到了这个,但也没有说它是从哪里来的
@silence_lamb df
是熊猫 DataFrame
。
在 Pandas 1.03 (Py 3.8) 上,这给了我 ValueError:xlsxwriter 不支持附加模式。将引擎更改为 openpyxl 至少解决了错误with pd.ExcelWriter(file,engine='openpyxl', mode = 'a') as writer:
@T.C.Proctor:在我的情况下,它没有覆盖它,只是在末尾添加了一个 1。因此创建了一个名为 Sheet31
的新工作表以上是关于Python 如何使用 ExcelWriter 写入现有工作表的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas/ExcelWriter 为单元格中的文本部分着色
使用 Pandas Excelwriter 写入 StringIO 对象?