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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:30:05