使用Openpyxl导入CSV到Excel时指定列报错及打开恢复异常求助
问题解决方案
1 第1、10列格式错误修复
问题根因
你当前将两列的值转为float类型存储,仅靠设置数字格式无法实现字符串样式的正常显示:如果原始CSV中对应值包含前导零,转为浮点型时前导零会直接丢失,后续设置数字格式也无法恢复,就会出现需要手动转字符串才能正常显示的问题。
修复方法
直接将对应列的值以字符串类型写入,若需要保证固定10位长度、不足位补前导零,可调用zfill()方法处理。
2 Excel打开报错修复
问题根因
代码存在两处关键错误:
- 缩进错误:遍历
reader的for循环写在了with open代码块之外,with块执行结束后CSV文件句柄已自动关闭,csv.reader无法正常读取数据,会写入异常无效内容到Excel - 遍历范围错误:
range(1, len(row))为左闭右开区间,会漏掉CSV最后一列数据,写入无效空值导致文件结构损坏,触发Excel恢复提示
修复方法
调整代码缩进层级,修正遍历范围,将读取、写入逻辑都放在with open块内。
修正后完整代码
import csv import openpyxl # 此处省略wb_1、ws_1、destination_file的初始化逻辑,需和你原有逻辑保持一致 with open('file_modified.csv', 'r') as f: reader = csv.reader(f, delimiter="|") next(reader, None) # 跳过CSV表头 i = 2 # 从Excel第2行开始写入 for row in reader: # 修正遍历范围,覆盖所有列 for j in range(1, len(row)+1): if j == 1 or j == 10: # 直接存字符串,zfill(10)可实现不足10位时自动补前导零 ws_1.cell(row=i, column=j).value = row[j-1].zfill(10) else: ws_1.cell(row=i, column=j).value = row[j-1] i += 1 wb_1.save(destination_file)
内容的提问来源于stack exchange,提问作者Prasanna K
相关产品推荐
相关产品推荐

