對符合特定條件的數據輸出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)

在這裏插入圖片描述

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