1. 背景
在用Pandas做数据处理时,为了呈现方便,往往会将结果数据导出为Excel文件。但美中不足的是Pandas并不支持Excel文件格式的设置。
而XlsxWriter可以与Pandas无缝结合,并具有非常精细的Excel格式控制功能。XlsxWriter对于Python初学者来说有一定的学习门槛,可以查询官网文档进行学习。
2. 问题
笔者在使用时,卡在了表格边框的设置上面。
在设置好format
后,采用worksheet.set_column()
或worksheet.set_row()
对行或列进行边框设置时,要么出现:
“所选列全部设置了边框”
要么出现:
“所选行全部设置了边框”
的情况。
3. 解决方法
worksheet.conditional_format()
参数及使用方法详见官网说明文档。
4. 举个栗子
我们采用官网教程的例子:tutorial01.xlsx
Excel表格中数据如下:
原始数据我们将该excel表格导入DataFrame,如下:
import pandas as pd
df = pd.read_excel('https://adamyide-1256435674.cos.ap-shanghai.myqcloud.com/tutorial01.xlsx', header = None, index = None)
df为:
df中的数据接下来,开始设置表格边框:
writer = pd.ExcelWriter('tutorial01_bolder.xlsx',engine='xlsxwriter')
df.to_excel(writer,sheet_name='sheet1', header = None, index = None)
workbook = writer.book
worksheet = writer.sheets['sheet1']
format_border = workbook.add_format({'border':1}) # 设置边框格式
worksheet.conditional_format('A1:XFD1048576',{'type':'no_blanks', 'format': format_border}) # 这里是核心,根据条件来设置格式
workbook.close()
format_border = workbook.add_format({'border':1})
中的'border':
格式:上面代码中的1是index值。
Index | Name | Weight | Style |
---|---|---|---|
0 | None | 0 | |
1 | Continuous | 1 | ----------- |
2 | Continuous | 2 | ----------- |
3 | Dash | 1 | - - - - - - |
4 | Dot | 1 | . . . . . . |
5 | Continuous | 3 | ----------- |
6 | Double | 3 | =========== |
7 | Continuous | 0 | ----------- |
8 | Dash | 2 | - - - - - - |
9 | Dash Dot | 1 | - . - . - . |
10 | Dash Dot | 2 | - . - . - . |
11 | Dash Dot Dot | 1 | - . . - . . |
12 | Dash Dot Dot | 2 | - . . - . . |
13 | SlantDash Dot | 2 | / - . / - . |
worksheet.conditional_format('A1:XFD1048576',{'type':'no_blanks', 'format': format_border})
可以查看官网说明,实际上是根据条件判断,进行格式化。
'A1:XFD1048576'
是目前.xlsx
格式文件支持的sheet大小,如果想提高运行效率,可以在已知表格大小的情况下,缩小这个区域。笔者没有尝试,应该会有效果吧。
这里注意参数中的'type'
,内容可以非常丰富,具体可以参考下官网Working with Conditional Formatting这一章。
最终出来的excel表格效果是这样:
输出效果已经可以满足我的需求了。
注意:以上代码框中的代码可以直接在装有pandas的环境中运行,文件会存在当前运行目录中。
5 感谢:
- XlsxWriter的作者John McNamara,给我们带来这么好用的工具。他的GitHub上有更多的信息。
- 史越慧同学,他/她的文章《用 python 渲染 excel 背景色,字体格式设置,合并单元格等》给了我指引。
网友评论