【问题标题】:Xlsxwriter Custom Column Formatting issueXlsxwriter 自定义列格式问题
【发布时间】:2020-04-23 16:51:19
【问题描述】:

我确信有一种更有效的方法来编写代码,但我遇到的问题是在我的列的数据框 2 中(dtypes 是表示格式为 yyyy-mm-dd 的日期的对象)。当我使用 xlsxWriter 时,除了具有日期的两列是 excel 中的“自定义”列类型并且没有格式化(对齐顶部也不是 8 号)之外,其他所有内容都完全符合我的需要。 excel 中的其余列是“一般”,格式正确。 任何建议将不胜感激

writer=pd.ExcelWriter("file.xlsx", engine='xlsxwriter')
df_summary.to_excel(writer, (sheet_name)='Sheet1', startrow=15, header=True, index=False)

workbook=writer.book
worksheet=writer.sheets['Sheet1']
worksheet.set_column('A:O', 15)  
worksheet.set_column('P:R', 30) 
workbook.formats[0].set_font_size(8)  
workbook.formats[0].set_text_wrap() 
workbook.formats[0].set_align('top') 
bg_format=workbook.add_format({'bg_color': '#cccccc'})
worksheet.set_row(15, cell_format=(bg_format))
writer.save()

【问题讨论】:

    标签: python formatting xlsxwriter customcolumn


    【解决方案1】:

    如果您的日期列是对象,您首先需要将它们转换为日期时间。然后,您需要在使用 xlsxwriter 创建 writer 对象时指定默认日期格式(有关更多信息,请查看 here)。

    下面是一个工作示例来证明这一点:

    import pandas as pd
    
    df = pd.DataFrame({'Date': ['04/23/2020','04/24/2020',
                                '04/25/2020','04/26/2020']})
    
    df['Date'] = pd.to_datetime(df['Date'])
    
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter',
                            datetime_format='m/d/yyyy')
    
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    
    writer.save()
    

    编辑

    import pandas as pd
    
    df = pd.DataFrame({'Date': ['04/23/2020','04/24/2020',
                                '04/25/2020','04/26/2020']})
    
    df['Date'] = pd.to_datetime(df['Date'])
    
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
    
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    
    cellFormat = workbook.add_format({'font_size': 8,
                                'font_name': 'Calibri',
                                'valign': 'top',
                                'align': 'left',
                                'num_format': 'm/d/yyyy'})
    
    for row in range(1,5):
        worksheet.write(row, 0, df.iloc[row-1,0], cellFormat)
    
    writer.save()
    

    【讨论】:

    • 非常感谢 Dimitris 的回复。这有助于在 excel 中将列类型设置为日期,但该列的格式仍然是默认的 Calibri 11,底部对齐与 Calibri 8,顶部对齐。将 workbook.formats 应用于“日期”列是否有技巧?再次感谢!
    • 事实是,通过 set_column 方法应用格式不适用于日期列。不用担心,尽管使用 for 循环和 write 方法,您仍然可以应用格式。检查我的答案,我编辑了它
    • 再次感谢 Dimitris,我想知道我是不是做错了什么。我试图实现 for 语句,但似乎被困在它如何实际使用单元格中的值上。周末会继续尝试,但如果我遇到困难,希望可以再次寻求帮助。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多