使用xlsxwriter(或其他包)创建Excel个特定命名的tabs,并将dataframe写入相应的tabs

Using xlsxwriter (or other packages) to create Excel tabs with specific naming, and write dataframe to the corresponding tab

我正在尝试根据不同的条件进行查询,然后在Excel 中创建单独的选项卡来存储查询结果。

例如,我想查询所有符合条件A的结果,并将结果写入名为"A"的Excel选项卡。查询结果以熊猫数据框格式存储。

我的问题是,当我想根据条件 "A"、"B"、"C"、"D" 执行 4 个不同的查询时,最后的 Excel 文件只包含一个选项卡,它对应于列表中的最后一个条件。好像之前的tab都被覆盖了

这是示例代码,其中我将 SQL 查询部分替换为预设数据框,并将选项卡名称设置为 0、1、2、3 ...,而不是默认的 Sheet1、Sheet2 ... Excel。

import pandas as pd
import xlsxwriter
import datetime



def GCF_Refresh(fileCreatePath, inputName):
    currentDT = str(datetime.datetime.now())
    currentDT = currentDT[0:10]
    loadExcelName = currentDT + '_' + inputName + '_Load_File'
    fileCreatePath = fileCreatePath +'\' + loadExcelName+'.xlsx'
    wb = xlsxwriter.Workbook(fileCreatePath)
    data = [['tom'], ['nick'], ['juli']]

    # Create the pandas DataFrame
    df = pd.DataFrame(data, columns=['Name'])
    writer = pd.ExcelWriter(fileCreatePath, engine='xlsxwriter')

    for iCount in range(5):
        #worksheet = writer.sheets[str(iCount)]
        #worksheet.write(0, 0, 'Name')
        df['Name'].to_excel(fileCreatePath, sheet_name=str(iCount), startcol=0, startrow=1, header=None, index=False)
        writer.save()
        writer.close()

# Change the file path here to store on your local computer
GCF_Refresh("H:\", "Bulk_Load")

此示例代码的目标是将 5 个选项卡命名为 0、1、2、3、4,并且每个选项卡都打印有 'tom'、'nick' 和 'juli'它。现在,我只有一个选项卡(名为 4),这是我预期的所有选项卡中的最后一个选项卡。

代码中有一些错误:

  • xlsx 文件是直接使用 XlsxWriter 创建的,然后在 Pandas 中再次创建它来覆盖。
  • to_excel() 方法引用 writer 对象而不是文件路径。
  • save()close()是一回事,不应该出现在 循环。

这是修复了这些问题的代码的简化版本:

import pandas as pd
import xlsxwriter

fileCreatePath = 'test.xlsx'
data = [['tom'], ['nick'], ['juli']]

# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['Name'])
writer = pd.ExcelWriter(fileCreatePath, engine='xlsxwriter')

for iCount in range(5):
    df['Name'].to_excel(writer, 
                        sheet_name=str(iCount), 
                        startcol=0, 
                        startrow=1, 
                        header=None, 
                        index=False)

writer.save()

输出:

有关使 Pandas 和 XlsxWriter 协同工作的一些详细信息,请参阅 XlsxWriter 文档中的 Working with Python Pandas and XlsxWriter