【问题标题】:Creating a blank worksheet and adding text to that new worksheet using Python, ExcelWriter and openpyxl使用 Python、ExcelWriter 和 openpyxl 创建一个空白工作表并向该新工作表添加文本
【发布时间】:2020-02-15 14:27:30
【问题描述】:

我正在使用带有 openpyxl 引擎的 ExcelWriter 创建一个新的 Excel 工作簿。我能够导出 作为副作用创建新工作表的数据框,但是当我尝试添加时

  • 新的空白工作簿出现错误(“工作簿未定义”)
  • 文本到现有工作簿中的单元格我收到错误(“'Summary_Data' 未定义”)

我将如何将下面的代码修改为 a) 添加一个新的空白工作表 b) 将文本添加到特定工作表中的特定单元格

我可能会因为试图混合和匹配来自不同地方的各种 sn-p 代码而感到困惑。

    #export various dataframes to excel
    with pd.ExcelWriter(f"data validation for {FNum}_{FName}.xlsx",engine='openpyxl') as writer:

        DWoldfiltered.to_excel(writer,sheet_name="Previous_load")

        #An attempt to create a new blank worksheet which fails
        #worksheet1 = workbook.add_worksheet('Summary_Data')

        #this works as a way of creating a worksheet
        new_summary.to_excel(writer,sheet_name="Summary_Data",startrow=1,startcol=1)
        old_summary.to_excel(writer,sheet_name="Summary_Data",startrow=13,startcol=1)

        #two different attempts to a) reference the new workbook b) add text to specific cells,
        #which both fail
        Summary_Data.cell(0,1).value="Latest load summary"
        Summary_Data.write(0,0,"Latest load summary")

    writer.save()

【问题讨论】:

    标签: python excel pandas.excelwriter


    【解决方案1】:

    使用writer.book 访问底层的openpyxl 工作簿对象,然后使用book.create_sheet() 来初始化一个新的openpyxl 工作表对象:

    import pandas as pd
    import pandas.util.testing as tm
    
    # Create example dataframe
    df = tm.makeDataFrame()
    
    with pd.ExcelWriter("out.xlsx", engine='openpyxl') as writer:
        # Write dataframe to excel worksheet
        df.to_excel(writer, sheet_name="dataframe")
    
        # Create new empty worksheet
        # Note: `sheet` is a `openpyxl.worksheet.worksheet.Worksheet` object
        book = writer.book
        sheet = book.create_sheet("summary")
    
        # Write data to worksheet cells
        sheet.cell(1, 1).value = "Amount of dataframe rows:"
        sheet.cell(2, 1).value = df.shape[0]
    
    writer.save()
    

    【讨论】:

    • 这是一个非常清晰和明智的解决方案@Xukrao。但是,我正在尝试将 df.describe() 的输出写入 excel。我尝试将描述输出转换为像这样的数据帧` DW describe = pd.DataFrame(DWfiltered.describe()) sheet.cell(1,1).value = "Latest Load" sheet.cell(2,2)。 value = DW describe[0]` 这会导致错误“raise Value Error Cannot convert{0!r} to Excel”.format(value)
    • @GregWilliams 不幸的是,我无法重现您所描述的错误。
    • .describe() 返回的数据有什么特别之处,使它与普通数据帧不同吗?我可能不得不将此作为一个新问题提出,因为 cmets 部分限制了我可以提供的详细信息,因为空间...
    • @GregWilliams 最好为此问题打开一个新问题。如果您可以在代码示例中手动定义(小)整个输入数据框,那将非常有帮助(因为这应该允许其他人准确地重现您的问题)。
    • 我在这里创建了一个单独的问题:(stackoverflow.com/questions/58485943/…)
    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多