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