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

如何遍历Excel工作簿所有工作表实现批量对比(无需硬编码索引)

Excel工作簿全工作表自动对比方案

需求说明

需要对比两个理应完全一致的Excel工作簿,定位内容差异。现有基于xlrd的代码仅支持单工作表对比,但工作簿的工作表数量不固定(两工作簿合计最多可达70个),要求无需硬编码工作表索引,实现自动遍历所有工作表完成对比。

原代码存在的问题:需手动修改sheet_by_index的索引值来切换对比的工作表,无法批量处理。

修改后的实现代码

from itertools import izip_longest
import xlrd

# 打开两个目标工作簿
wb1 = xlrd.open_workbook('file1.xlsx')
wb2 = xlrd.open_workbook('file2.xlsx')

# 获取两个工作簿的所有工作表名称集合,确保覆盖所有可能的表
wb1_sheet_names = set(wb1.sheet_names())
wb2_sheet_names = set(wb2.sheet_names())
all_sheet_names = wb1_sheet_names.union(wb2_sheet_names)

# 遍历所有需要对比的工作表
for sheet_name in all_sheet_names:
    print(f"\n=== 正在对比工作表: {sheet_name} ===")
    
    # 尝试获取两个工作簿中的对应工作表,处理表缺失的情况
    sheet1 = None
    try:
        sheet1 = wb1.sheet_by_name(sheet_name)
    except xlrd.XLRDError:
        print(f"工作簿file1.xlsx中不存在工作表: {sheet_name}")
    
    sheet2 = None
    try:
        sheet2 = wb2.sheet_by_name(sheet_name)
    except xlrd.XLRDError:
        print(f"工作簿file2.xlsx中不存在工作表: {sheet_name}")
    
    # 仅当两个表都存在时,执行内容对比
    if sheet1 and sheet2:
        max_row_count = max(sheet1.nrows, sheet2.nrows)
        for rownum in range(max_row_count):
            # 获取当前行数据,处理行数量不一致的情况
            row1 = sheet1.row_values(rownum) if rownum < sheet1.nrows else []
            row2 = sheet2.row_values(rownum) if rownum < sheet2.nrows else []
            
            if rownum >= sheet1.nrows:
                print(f"工作表{sheet_name} - 第{rownum+1}行: file1.xlsx缺失该行")
            if rownum >= sheet2.nrows:
                print(f"工作表{sheet_name} - 第{rownum+1}行: file2.xlsx缺失该行")
            
            # 逐列对比单元格内容
            max_col_count = max(len(row1), len(row2))
            for colnum in range(max_col_count):
                val1 = row1[colnum] if colnum < len(row1) else None
                val2 = row2[colnum] if colnum < len(row2) else None
                
                if val1 != val2:
                    print(f"工作表{sheet_name} - 行{rownum+1} 列{colnum+1}: '{val1}' != '{val2}'")

核心改进说明

  • 自动遍历所有工作表:通过获取两个工作簿的工作表名称集合,自动覆盖所有需要对比的表,彻底摆脱硬编码索引的限制。
  • 处理工作表缺失场景:如果某个工作表仅存在于其中一个工作簿,会直接输出缺失提示,避免遗漏差异。
  • 完善差异检测:不仅对比单元格内容不一致的情况,还会提示其中一个工作簿缺失的行,让差异定位更全面。
  • 结果更易读:增加工作表名称的标识,让每一条差异信息都能直接对应到具体位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:55:28