Python批量提取文件夹中多个Excel文件连续单元格(A283:A9000)数据失败求助
Python批量提取文件夹中多个Excel文件连续单元格(A283:A9000)数据失败求助
嗨,我完全懂你现在的困扰——之前学的代码处理非连续单元格顺顺当当,一换成连续的A283:A9000范围就罢工,这种“差一点就行”的问题最磨人了😣
先帮你分析下可能的原因:你之前用的代码大概率是针对单个/非连续单元格设计的(比如指定多个零散的单元格地址),但处理连续单元格范围时,语法或者数据读取的逻辑没调整过来,导致代码无法正确识别这个连续区间。
下面给你两种靠谱的解决方案,都是Python里处理Excel批量提取的常用方法,你可以根据自己的需求选:
方案一:用Pandas快速读取(适合大多数场景)
Pandas的read_excel其实可以直接指定连续列和行范围,非常高效,尤其是处理大量文件的时候:
import pandas as pd import os # 替换成你的文件夹路径 target_folder = "你的Excel文件夹路径" all_extracted_data = [] # 遍历文件夹里的所有Excel文件 for file_name in os.listdir(target_folder): # 只处理xlsx和xls格式的文件 if file_name.endswith((".xlsx", ".xls")): file_path = os.path.join(target_folder, file_name) # 关键:读取A列,跳过前282行(因为A283是第283行,Pandas从0开始计数),读取8718行(9000-283+1) # 如果你的Excel没有表头,记得加上header=None参数! extracted_df = pd.read_excel( file_path, usecols="A", # 指定只读取A列 skiprows=282, # 跳过前282行,直接从第283行开始读 nrows=8718 # 读取从283到9000的总行数 ) # 给数据加上来源文件名,方便后续溯源 extracted_df["来源文件"] = file_name all_extracted_data.append(extracted_df) # 把所有文件的数据合并成一个表格 final_result = pd.concat(all_extracted_data, ignore_index=True) # 保存结果到新的Excel文件 final_result.to_excel("批量提取结果汇总.xlsx", index=False)
方案二:用OpenPyXL精准读取单元格范围(适合需要精细控制的场景)
如果你的Excel文件有特殊格式(比如合并单元格、复杂表头),用OpenPyXL直接按单元格地址读取会更精准:
from openpyxl import load_workbook import os import pandas as pd target_folder = "你的Excel文件夹路径" all_extracted_data = [] for file_name in os.listdir(target_folder): if file_name.endswith(".xlsx"): file_path = os.path.join(target_folder, file_name) # 用只读模式打开文件,处理大文件更快 wb = load_workbook(file_path, read_only=True) # 读取活动工作表,也可以指定具体表名比如wb["Sheet1"] ws = wb.active # 直接读取A283到A9000的所有单元格值 cell_values = [cell.value for row in ws["A283:A9000"] for cell in row] # 转成DataFrame方便后续处理 extracted_df = pd.DataFrame(cell_values, columns=["A列提取数据"]) extracted_df["来源文件"] = file_name all_extracted_data.append(extracted_df) # 记得关闭工作簿 wb.close() # 合并并保存结果 final_result = pd.concat(all_extracted_data, ignore_index=True) final_result.to_excel("批量提取结果汇总.xlsx", index=False)
最后给你提个小建议:可以回头看看你原来的代码,是不是犯了这些常见错误?比如用了df.loc[:, "A283":"A9000"]这种错误的写法(loc是按行索引和列名,不是单元格地址),或者把连续范围拆成了单个单元格循环读取,导致逻辑出错。
备注:内容来源于stack exchange,提问作者Kaiyuan Zheng




