- 設置好格式,然後用條件判斷符合規則的加格式,不符合的不做處理。
- 寫出數據時一個個單元格寫出和按行/列寫出在效率上並無太大差異。
- 寫出效率約如下,所消耗時間與數據量成線性關係。
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)