对符合特定条件的数据输出Excel时设置格式

  • 设置好格式,然后用条件判断符合规则的加格式,不符合的不做处理。
  • 写出数据时一个个单元格写出和按行/列写出在效率上并无太大差异。
  • 写出效率约如下,所消耗时间与数据量成线性关系。

All Done!,输出 1W 行 20 列 数据共耗时2.3836s
All Done!,输出 10W 行 20 列 数据共耗时24.5910s
All Done!,输出 100W 行 20 列 数据共耗时299.4173s

import xlsxwriter
import pandas as pd
def writer2excel_withformat(df,workbookfile,sheetname):
    workbook = xlsxwriter.Workbook(workbookfile,options={'strings_to_urls': False})
    assert len(df) < 1000000,'文件超过100万行'
    # Add a header format.
    header_format = workbook.add_format({
        'bold': True,
        'text_wrap': False, # 自动换行
        'valign': 'center',
#         'fg_color': '#E6B8B7',
#         'font_color':'red',
        'border': 1})
    condition_format = workbook.add_format({
        'bold': True,
        'text_wrap': True,
        'valign': 'top',
#         'fg_color': '#E6B8B7',
        'font_color':'red',
#         'border': 1
    })
    worksheet = workbook.add_worksheet(name=str(sheetname))
    # 先写表头
    for col_num, value in enumerate(df.columns):
        worksheet.write(0, col_num , value, header_format) # 行,列,值,格式
    # 再写内容
    for row_num, row_data in enumerate(df.values):
        for col_num, data in enumerate(row_data):
            if col_num == 0 and data >= 3: # 符合条件的内容加格式,第一列如果值大于3
                worksheet.write(row_num+1, col_num, data,condition_format)
                
            else:
                worksheet.write(row_num+1, col_num, data)
    workbook.close()

if __name__=='__main__':
    df = pd.DataFrame({'A':[1,2,3,4],'B':[5,6,7,8]})
    workbookfile = 'hello world.xlsx'
    sheetname = 'test'
    writer2excel_withformat(df,workbookfile,sheetname)

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章