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

求助:遍历多工作表Excel文件,删除指定行列后导出为CSV

问题分析与修正方案

你的代码核心错误点:

  • 混淆了工作表名称(字符串)与工作表对象:workbook.sheetnames返回的是字符串列表,循环中的sheet是名称而非可操作的工作表实例,必须通过workbook[sheet]获取实际工作表对象。
  • 未定义mrts_worksheet就直接调用,导致变量未定义错误。
  • 删除行顺序错误:删除上方行会导致下方行索引偏移,必须从底部往顶部删行才能保证索引正确。
  • delete_rows调用语法错误:正确用法是工作表对象.delete_rows(起始行, 行数),不需要嵌套调用。
  • 多余的file_handle.close():with上下文管理器会自动关闭文件,无需手动调用。

最简实现代码(仅依赖openpyxl+csv,无额外依赖)

import openpyxl
import csv

# 加载工作簿,data_only=True读取单元格实际值而非公式
workbook = openpyxl.load_workbook("C:/Users/example.xlsx", data_only=True)

# 遍历所有工作表
for sheet_name in workbook.sheetnames:
    ws = workbook[sheet_name]
    
    # 按从下到上顺序删除行,避免索引偏移
    ws.delete_rows(72, 79)  # 删除72-150行(共150-72+1=79行)
    ws.delete_rows(6, 1)    # 删除原第6行
    ws.delete_rows(1, 4)    # 删除前4行
    ws.delete_cols(1, 1)    # 删除第一列
    
    # 给指定单元格赋值(注意删除行后原位置已偏移,此处为删除后的B5)
    ws['B5'] = "Diff Label"
    
    # 导出为CSV文件
    csv_path = f"C:/Users/example_{sheet_name}.csv"
    with open(csv_path, "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        # 直接读取行值写入,无需逐个单元格提取
        for row in ws.iter_rows(values_only=True):
            writer.writerow(row)

补充说明:

  • 如果需要兼容.xls格式,可安装xlrd==1.2.0(xlrd 2.0+不再支持xls),但处理逻辑不如openpyxl直观,优先推荐用openpyxl处理xlsx格式。
  • 指定encoding="utf-8"可避免导出CSV时出现中文乱码问题。

内容的提问来源于stack exchange,提问作者Awellkeptsecret

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:10:04