使用Python Openpyxl提取Excel含“sigma”子串的行生成新表格问题求助
Openpyxl提取含sigma子串行代码修正
原有代码存在的问题
- 路径语法错误:
w_new.save()的路径参数未加引号,属于基础语法错误 - 变量名混用:定义的新工作簿变量为
w_new,后续误写为wb_new,同时混淆了工作簿与工作表的方法,append()是工作表对象的方法,不能通过工作簿或save方法调用 - 保存时机错误:未写入任何内容就提前调用了
save(),追加完所有行后再执行保存即可 - 匹配逻辑缺失兼容性:未先将单元格值转为字符串就判断子串,遇到数字、日期等类型会直接报错
- 重复追加风险:同一行多个单元格含sigma时会被重复写入,匹配到一次就应终止当前行的遍历
- 未获取新工作表对象:没有获取新建工作簿的激活工作表,无法执行行追加操作
修正后可运行代码
import openpyxl # 源文件路径 source_path = "C:\\Users\\1847\\Desktop\\DTO_aligned_to_EC_9_7_21_version.xlsx" # 新文件保存路径 target_path = "C:\\Users\\1847\\Desktop\\DTO_aligned_to_EC_sigma.xlsx" # 加载源文件 wb_source = openpyxl.load_workbook(source_path, read_only=True) ws_source = wb_source.active # 新建工作簿,获取激活工作表 wb_target = openpyxl.Workbook() ws_target = wb_target.active # 遍历源表每一行 for row in ws_source.iter_rows(values_only=True): # 标记当前行是否包含sigma has_sigma = False for cell_value in row: if cell_value is not None and "sigma" in str(cell_value): has_sigma = True # 匹配到就跳出,避免重复判断 break if has_sigma: # 追加整行数据到新表 ws_target.append(row) # 保存新工作簿 wb_target.save(target_path) # 关闭工作簿释放资源 wb_source.close() wb_target.close()
逻辑说明
- 用
iter_rows(values_only=True)直接获取行的所有值,比遍历cell对象效率更高 - 先转
str(cell_value)兼容所有单元格类型的匹配判断 - 新增标记位避免同一行被重复追加
- 所有内容写入完成后再执行保存操作
内容的提问来源于stack exchange,提问作者cat012
相关产品推荐
相关产品推荐

