如何在XlsxWriter库中将单元格背景色设置为无填充
XlsxWriter 实现单元格无填充背景色的方法
首先注意一个XlsxWriter的常见使用误区:不要在遍历单元格的循环中反复修改同一个Format对象的属性。XlsxWriter的格式属性会在单元格写入时静态绑定,循环内修改同一个格式对象,会导致所有关联该格式的单元格最终都应用最后一次修改的样式,无法实现逐单元格差异化样式。推荐提前定义好需要的不同格式对象,循环时按条件匹配调用。
针对无填充(透明背景,会显示表格网格线、不会遮挡下层内容,和白色实心填充有本质区别)的实现,对应调用方式如下:
- 新建无填充格式:直接通过
add_format()创建即可,默认状态就是无填充,不需要额外配置属性 - 若要把已设置过填充色的格式重置为无填充,核心是将填充模式设为无,对应调用
format.set_pattern(0)即可,不需要额外设置背景色参数。
修正后的可运行示例代码:
import xlsxwriter # 初始化工作簿、工作表 workbook = xlsxwriter.Workbook('bg_demo.xlsx') worksheet = workbook.add_worksheet() # 提前定义两种用到的格式 yellow_bg_format = workbook.add_format() yellow_bg_format.set_bg_color('yellow') no_fill_format = workbook.add_format() # 新建格式默认就是无填充状态,无需额外设置 bgNum = [0,0,0,36,35,0,36] for col_idx, value in enumerate(bgNum): if value == 36: worksheet.write(0, col_idx, value, yellow_bg_format) else: worksheet.write(0, col_idx, value, no_fill_format) workbook.close()
如果你因特殊场景必须在循环中修改同一个格式对象(不推荐,易出现样式异常),else分支按如下写法即可实现无填充:
else: format.set_pattern(0) # 0对应无填充模式,是实现透明无背景的核心配置
注意:不要用
set_bg_color('white')模拟无填充,该方法会设置实心白色背景,会遮挡网格线和工作表下层的内容,和原生无填充效果不一致。
内容的提问来源于stack exchange,提问作者Ishan Shrestha
相关产品推荐
相关产品推荐

