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

修复Python循环提取Excel行并生成独立文件时的AttributeError问题

修复Python循环提取Excel行并生成独立文件时的AttributeError问题

问题原因分析

你遇到的AttributeError: 'Worksheet' object has no attribute 'row_values'是因为row_values()并不是openpyxl库中Worksheet对象的方法——这个方法常见于xlrd或者pandas的相关对象中。另外你的原代码还有一个隐藏问题:每次循环没有重新加载header.xlsx,这样会导致后续生成的文件会累积之前添加的行(比如2.xlsx会是header+第1行+第2行,而不是你需要的header+第2行)。

修复后的完整代码

import os
import openpyxl

# 定义文件路径(统一提取路径,后续维护更方便)
HEADER_PATH = r"C:\Users\kxz237\Desktop\test\header.xlsx"
STATIONS_PATH = r"C:\Users\kxz237\Desktop\test\stations.xlsx"
OUTPUT_DIR = r"C:\Users\kxz237\Desktop\test"

# 预加载stations工作簿,避免循环内重复加载
stations_wb = openpyxl.load_workbook(STATIONS_PATH)
stations_sh = stations_wb.active

# 遍历stations的每一行,最多处理167行
for row_num in range(1, min(stations_sh.max_row + 1, 168)):
    # 每次循环重新加载header工作簿,保证每个新文件都基于原始header生成
    header_wb = openpyxl.load_workbook(HEADER_PATH)
    header_sh = header_wb.active
    
    # 用openpyxl的方式获取当前行的所有单元格值
    current_row_values = [cell.value for cell in stations_sh[row_num]]
    
    # 将当前行数据追加到header工作表
    header_sh.append(current_row_values)
    
    # 生成动态输出文件名,替换循环变量到文件名中
    output_file = os.path.join(OUTPUT_DIR, f"{row_num}.xlsx")
    # 保存新文件
    header_wb.save(output_file)

print("167个文件已全部生成完成!")

关键修改点说明

  1. 替换row_values()的实现:
    改用列表推导式[cell.value for cell in stations_sh[row_num]]来获取指定行的所有单元格值,这是openpyxl库中提取行数据的标准方式。

  2. 循环内重新加载header工作簿:
    把header_wb = openpyxl.load_workbook(HEADER_PATH)移到循环内部,确保每个新文件都是基于原始header.xlsx生成,不会累积之前添加的行数据。

  3. 修正输出文件名的变量替换:
    原代码中i.xlsx的i是静态字符串,不会自动替换为循环变量,改用f-stringf"{row_num}.xlsx"动态生成对应序号的文件名。

  4. 限制处理行数到167行:
    通过min(stations_sh.max_row + 1, 168)确保即使stations.xlsx行数超过167,也只会处理前167行,完全匹配你的需求。

效果验证

运行修复后的代码后,你会在目标目录下得到1.xlsx到167.xlsx的独立文件,每个文件的内容都是原始header.xlsx加上stations.xlsx中对应的单独一行数据,完全符合你的预期。

备注:内容来源于stack exchange,提问作者Kaiyuan Zheng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:00:28