Openpyxl实现按列筛选后将指定列ID追加至另一工作表
解决方案
因为Sheet1和Sheet2存在同名列,直接用固定索引定位列很容易因为列位置变动出错,建议通过列名来映射目标ID列,这样更灵活可靠。以下是修改后的代码,完美匹配你的需求:
import openpyxl wb = openpyxl.load_workbook("workbook.xlsx") sheet1 = wb["sheet_1"] sheet2 = wb["sheet_2"] # 读取Sheet1表头,建立列名到列索引的映射(默认表头在第一行) header = [cell.value for cell in next(sheet1.iter_rows(min_row=1, max_row=1))] # 把这里的"ID"替换成你实际要提取的ID列的列名 target_id_col = "ID" if target_id_col not in header: raise ValueError(f"Sheet1里找不到名为'{target_id_col}'的列") id_col_idx = header.index(target_id_col) # 遍历Sheet1的数据行(从第二行开始,跳过表头) for row in sheet1.iter_rows(min_row=2): # 筛选第一列值为"New"的行 if row[0].value == "New": id_value = row[id_col_idx].value # 将ID追加到Sheet2的第一列,append会自动追加到已有数据的下一行 sheet2.append([id_value]) # 记得保存修改后的文件 wb.save("updated_workbook.xlsx")
关键优化点
- 用列名匹配代替硬编码索引,就算列的位置变了也不会出错
- 只提取你需要的ID列值,而不是整行追加,完全符合需求
- 跳过表头行,避免误处理表头数据
- 增加了列名不存在的校验,防止运行时出现无意义的报错
内容的提问来源于stack exchange,提问作者KskiAl
相关产品推荐
相关产品推荐

