1、简介
使用pandas修改excel的样式,本质上整合了XlsxWriter模块,实现的excel样式修改,下面是XlsxWriter模块功能
- 100%兼容Excel的xlsx文件;
- 完整的格式;
- 合并单元格;
- 定义名称;
- 图表;
- 自动过滤器;
- 数据验证和下拉列表;
- 条件格式;
- 工作簿的PNG、JPEG、BMP、WMF、EMF等图像;
- 丰富的多格式字符串;
- 单元格注释;
- 文本框;
- 与Pandas模块整合;
- 用于写入大文件的内存优化模式;
详情:XlsxWriter
2、使用
- 样式
header_format = workbook.add_format({
'bold': True, # 字体加粗
'text_wrap': True, # 是否自动换行
'valign': 'bottom', # 垂直对齐方式
'align': 'center', # 水平对齐方式
'fg_color': '#D7E4BC', # 单元格背景颜色
'border': 1, # 边框
'top':2, # 上边框
'left':2, # 左边框
'right':2, # 右边框
'bottom':2, # 底边框
'num_format': 'yyyy-mm-dd',# 格式})
或者
header_format .set_font_size(10)
header_format .set_bold()
header_format .set_bg_color('#101010')
header_format .set_font_color('#FEFEFE')
header_format .set_align('center')
header_format .set_align('vcenter')
header_format .set_bottom(2)
header_format .set_top(2)
header_format .set_left(2)
header_format .set_right(2)
- 方法
workbook.add_format({}) # 为表格添加样式,参数为一个字典,字典内容{'bold': True, 'align': 'center' }
worksheet.set_column("A:A", 15, header_format) # 设置A列的宽度为15,使用header_format样式(header_format样式 <====> header_format = workbook.add_format({}) ),当然你也可以设置A列到D列"A:D"
worksheet.set_default_row(90) # 默认设置所有行高的高度
worksheet.set_row(0,15,header_format) # 设置指定行
worksheet.merge_range('B4:D4', 'Merged Range', merge_format) # 合并单元格方法,合并B列到D列的第四行
# 或者
worksheet.merge_range('B4:D5', 'Merged Range', merge_format) # 合并B列到D列的第四行到五行
- 图表
详情:插入图表
3、实际场景使用
假设现在我们需要将一个DataFrame的数据格式的数据保存为我们想要的excel表格,并对生成的excel进行处理
# list转dataframe
df = pd.DataFrame(data, columns=['sn', 'Uplink','Downlink','file'])
writer = pd.ExcelWriter("log_{0}.xlsx".format(time.strftime("%Y%m%d%H%M%S")), engine='xlsxwriter')
# 保存到本地excel
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
header_format = workbook.add_format({
'valign': 'vcenter', # 垂直对齐方式
'align': 'center', # 水平对齐方式
})
header_format1 = workbook.add_format({
'valign': 'vcenter', # 垂直对齐方式
'align': 'center', # 水平对齐方式
'text_wrap': True
})
worksheet.set_column("A:A", 15, header_format)
worksheet.set_column("B:C", 60,header_format1)
worksheet.set_column("D:D", 45,header_format)
worksheet.set_default_row(90)# 设置所有行高
worksheet.set_row(0,15,header_format)#设置指定行
writer.save()
writer.close()