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

Openpyxl设置所有工作表C-F列为百分比格式报错解决

问题解决方法

报错根因

你遇到的TypeError: 'method' object is not subscriptable来自两个写法错误:

  • ws.cell是openpyxl提供的获取单个单元格的方法,必须传入行列参数调用,本身不支持[]下标切片操作
  • openpyxl没有ws.cell['C:F']这种直接选取列范围的语法

正确实现代码

直接给C-F列设置列级格式即可,格式设置在创建工作表后、写入数据前后都可生效,列级格式会自动应用到整列所有单元格,不需要逐行遍历,执行效率更高:

wb = openpyxl.Workbook()

del wb[wb.sheetnames[0]]

for txt_file in pathlib.Path(files).glob('*.txt'):
    with open(txt_file) as data:
        ws = wb.create_sheet(title=os.path.basename(txt_file.stem))
        # 给C到F列统一设置两位小数的百分比格式
        for col_letter in ["C", "D", "E", "F"]:
            ws.column_dimensions[col_letter].number_format = "0.00%"
        for row in csv.reader(data, delimiter='\t'):
            ws.append(row)
                   
wb.save(output)

补充说明

  • 你的源数据里的数值本身就是0-1区间的小数(比如0.998514对应99.85%),直接套用0.00%格式即可,不需要额外做乘100的转换,和Excel原生百分比格式逻辑完全一致
  • 前3行的表头文本(比如Up/Maintenance字段名)即使在C-F列范围内,套用数字格式也不会显示异常,Excel会自动识别文本类型跳过格式渲染
  • 如果不需要给表头行设置格式,可以在所有数据写入完成后,遍历指定行范围的单元格设置格式,示例代码如下:
# 所有数据append完成后添加,仅给第4行及以后的C-F列设置格式
for row in ws["C4:F" + str(ws.max_row)]:
    for cell in row:
        cell.number_format = "0.00%"

内容的提问来源于stack exchange,提问作者Voon Eng Hong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:45:38