【问题标题】:Python How to use ExcelWriter to write into an existing worksheetPython 如何使用 ExcelWriter 写入现有工作表
【发布时间】: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)

但问题是这样做的输出只是函数的第二次调用,就好像函数会覆盖整个工作簿一样。我想我需要加载在这种情况下已经存在的工作簿? 有什么帮助吗?

【问题讨论】:

标签: python pandas xlsxwriter


【解决方案1】:

使用openpyxl 中的load_book - 请参阅xlsxwriteropenpyxl 文档:

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'
  • 只需仔细检查一下,pandas 0.17.1openpyxl 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 的新工作表
猜你喜欢
  • 2019-07-21
  • 2019-10-23
  • 2021-01-28
  • 2019-08-22
  • 2015-03-19
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多