xlrd实现xls转xlsx复制单元格样式时判断字体加粗的替代方法
xlrd判断单元格字体加粗的官方方案
你当前代码里取到的xlswb.xf_list[cell.xf_index]是XF扩展格式对象而非字体对象,用到的_font_flag属于xlrd的内部私有属性,不建议在生产环境使用,存在版本迭代后属性失效的风险。
xlrd本身提供了公开的字体属性访问接口,无需依赖私有标识,具体操作逻辑如下:
- 第一步:从XF对象中提取字体索引
font_idx = xlswb.xf_list[cell.xf_index].font_index - 第二步:从工作簿的全局字体列表中取出对应字体对象
cell_font = xlswb.font_list[font_idx] - 第三步:直接读取
cell_font.bold属性即可判断是否加粗,该属性为布尔数值,返回1代表加粗,返回0代表常规字重。
你还可以通过同一个字体对象拿到其他你需要的样式属性,适配已经定义的斜体、下划线格式:
- 斜体判断:
cell_font.italic,返回1即为斜体 - 下划线判断:
cell_font.underline_type,返回非0值即为存在下划线
以下是核心逻辑的优化代码片段:
for row in range(len(all_rows)): for col in range(len(all_rows[0])): cell = xlsws.cell(row, col) # 取XF格式对象 xf = xlswb.xf_list[cell.xf_index] # 取对应字体对象 cell_font = xlswb.font_list[xf.font_index] # 匹配对应样式 cell_format = None if cell_font.bold: cell_format = bold elif cell_font.italic: cell_format = italic elif cell_font.underline_type != 0: cell_format = uline # 写入单元格 xlsxws.write(row, col, all_rows[row][col], cell_format)
注意:如果需要适配加粗+斜体、加粗+下划线这类叠加样式,需要动态生成XlsxWriter的Format对象,提前定义的孤立格式无法覆盖多样式叠加的场景。
内容的提问来源于stack exchange,提问作者Nastalius Alamillo
相关产品推荐
相关产品推荐

