首页 > 解决方案 > 每个工作表多个数据框,每个工作簿多个工作表

问题描述

我编写了一个函数,以便我可以将多个数据框写入一个 Excel 工作表,然后在一个 Excel 工作簿中有多个工作表。我能够实现第一部分,但不是第二部分。当脚本运行时,它会覆盖现有选项卡并用新选项卡覆盖它,这意味着每次我打开输出文件时,它只有一张,即最新的一张。

我一直对 writer.save() 函数以及何时使用它(即:in 或 our of a loop)感到有些困惑。有什么建议么?

def dfs_to_sheet(dflist, bookname, sheetname, startrow = 0):
    writer = pd.ExcelWriter('{}.xlsx'.format(bookname), engine='openpyxl')
    numdfs = 0
    startrow = 0
    for i in dflist:
        if numdfs == 0:
            i.to_excel(writer, sheet_name=sheetname,  startrow = startrow)
        elif numdfs != 0:
            i.to_excel(writer, sheet_name = sheetname, startrow = startrow)
        startrow = startrow + len(i) + 2
        numdfs += 1
    writer.save()

标签: pythonexcelpandas

解决方案


您正在寻找的答案与此处的解决方案有关,但由于您想在多次迭代中调用它,所以它有点复杂。我的解决方案如下,但请记住,如果有重复的工作表,这会变得混乱(例如,如果 Sheet1 存在,并且您尝试再次添加 Sheet1,它就会变成 Sheet11)。

import pandas as pd
import os.path
from openpyxl import load_workbook

def dfs_to_sheet(dflist, bookname, sheetname, startrow = 0):
    book_file = '{}.xlsx'.format(bookname)
    writer = pd.ExcelWriter(book_file, engine='openpyxl')
    if os.path.isfile(book_file):
        writer.book = load_workbook(book_file)
    numdfs = 0
    startrow = 0
    for i in dflist:
        if numdfs == 0:
            i.to_excel(writer, sheet_name = sheetname,  startrow = startrow)
        elif numdfs != 0:
            i.to_excel(writer, sheet_name = sheetname, startrow = startrow)
        startrow = startrow + len(i) + 2
        numdfs += 1
    writer.save()
    writer.close()

推荐阅读