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
相关产品推荐
相关产品推荐

