You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:06:00