使用xlsxwriter(或其他包)创建具有特定命名的Excel选项卡,并将 Dataframe 写入相应的选项卡

9bfwbjaz  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(138)

我尝试根据不同的条件进行查询,然后在Excel中创建单独的选项卡来存储查询结果。
例如,我想查询所有符合条件A的结果,并将结果写入名为“A”的Excel选项卡。查询结果以Pandas数据框格式存储。
我的问题是,当我想根据条件“A”,“B”,“C”,“D”执行4个不同的查询时,最终的Excel文件只包含一个选项卡,它对应于列表中的最后一个条件。
下面是示例代码,其中我将SQL查询部分替换为预设的 Dataframe ,并将选项卡名称设置为0、1、2、3 ...,而不是Excel中默认的Sheet1、Sheet2...。

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),这是我期望的所有标签中的最后一个标签。

8xiog9wr

8xiog9wr1#

代码中有许多错误:

  • 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()

输出:

请参阅XlsxWriter文档中的Working with Python Pandas and XlsxWriter,了解有关如何让Pandas和XlsxWriter协同工作的一些详细信息。

raogr8fs

raogr8fs2#

对于阅读本文的其他人,最好将其 Package 在contextmanager中

import pandas as pd
import xlsxwriter

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

# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['Name'])
with pd.ExcelWriter(fileCreatePath, engine='xlsxwriter') as writer:
    for iCount in range(5):
        df['Name'].to_excel(writer, 
                            sheet_name=str(iCount), 
                            startcol=0, 
                            startrow=1, 
                            header=None, 
                            index=False)

通过 Package 在contextmanager中,您可以确保资源(例如excel)被适当地释放

相关问题