【问题标题】:ExcelWriter overwriting sheets when writingExcelWriter 写入时覆盖工作表
【发布时间】:2019-07-21 14:34:07
【问题描述】:

此程序应获取单个工作表的内容并将它们放入一个 Excel 工作簿。它几乎做到了,但它是覆盖而不是将新工作表附加到最终工作簿中。我读到 pandas excel writer 是解决这个问题的方法,关于它为什么会有这种行为的任何想法?

import xlwt, csv, os
from openpyxl import load_workbook
import pandas as pd
from pandas import ExcelWriter

csv_folder = r'C:\Users\Me\Desktop\Test_Folder\\'

for fil in os.listdir(csv_folder):

    if '.xlsx' not in fil:
        continue
    else:
        pass

    df = pd.read_excel(csv_folder+fil, encoding = 'utf8')

    file_name = fil.replace('.xlsx','')

    writer = pd.ExcelWriter('condensed_output.xlsx', engine = 'xlsxwriter')
    df.to_excel(writer, sheet_name = file_name)
    writer.save()
    #writer.close()

【问题讨论】:

    标签: python pandas append xlsxwriter


    【解决方案1】:

    确保 writer.save() 在循环之外。还要注意工作表名称的字符限制,因此如果文件名在某个点之前都相同,那么您也会冒着以这种方式覆盖工作表名的风险。

    import xlwt, csv, os
    from openpyxl import load_workbook
    import pandas as pd
    from pandas import ExcelWriter
    
    csv_folder = r'C:\Users\Me\Desktop\Test_Folder\\'
    writer = pd.ExcelWriter('condensed_output.xlsx', engine = 'xlsxwriter')
    for fil in os.listdir(csv_folder):
    
        if '.xlsx' not in fil:
            continue
        else:
            pass
    
        df = pd.read_excel(csv_folder+fil, encoding = 'utf8')
    
        file_name = fil.replace('.xlsx','')
    
    
        df.to_excel(writer, sheet_name = file_name) 
    
    writer.save() #make sure this is outside of the loop. 
    

    ETA:也在循环之外建立编写器

    【讨论】:

    • 实施该解决方案时,结果是相同的。 condensed_output.xlsx 只包含一个工作表,并且工作表是目录中的最后一个文件,因此它仍然会覆盖每次迭代。
    • 我已经更新了答案。我错过了要摆脱循环的两件事。
    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 2016-04-17
    • 1970-01-01
    • 2016-06-14
    • 2018-08-24
    • 2017-07-28
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多