"""任务:处理Excel文件场景:从Excel导入数据"""# 需要安装: pip install openpyxlimport openpyxl# Python 最常用的 Excel 处理库,处理 .xlsx 文件try: import openpyxl def excel_to_documents(filepath: str, sheet_name=None, text_columns=None): """从Excel提取文档 目标:把 Excel → 字典列表 """ wb = openpyxl.load_workbook(filepath) if sheet_name: ws = wb[sheet_name] # 选工作表 else: ws = wb.active documents = [] headers = [cell.value for cell in ws[1]] # 第一行作为表头 for row in ws.iter_rows(min_row=2, values_only=True): doc = {} for header, value in zip(headers, row): if text_columns is None or header in text_columns: doc[header] = value if doc: documents.append(doc) return documents def create_excel_report(data: dict, filepath: str): """创建Excel报告,把数据 → 写入 Excel """ wb = openpyxl.Workbook() # 新建一个空白工作簿(内存中) for sheet_name, rows in data.items(): if sheet_name in wb.sheetnames: ws = wb[sheet_name] else: ws = wb.create_sheet(sheet_name) for row_data in rows: ws.append(row_data) # 删除默认sheet if 'Sheet' in wb.sheetnames: wb.remove(wb['Sheet']) wb.save(filepath) # 测试 wb = openpyxl.Workbook() ws = wb.active ws.append(["ID", "Content", "Category"]) ws.append([1, "First doc", "A"]) ws.append([2, "Second doc", "B"]) wb.save("test.xlsx") docs = excel_to_documents("test.xlsx", text_columns=["Content"]) assert len(docs) == 2 print("✅ Excel处理测试通过")except ImportError: print("⚠️ openpyxl未安装,跳过Excel测试")
一、场景
读取 Excel → 转成 Python 字典(给 AI / 程序用),
Python 数据 → 写入 Excel(生成报表),用于数据导入导出等。
二、个人理解/最初卡在哪里
for row in ws.iter_rows(min_row=2, values_only=True)
安全、高效、逐行读取 Excel 数据,从第 2 行开始,循环每一行,values_only=True → 只取值。返回值是一行一行的元组。
简单读写用 openpyxl, 复杂分析用 pandas。
三、代码中的关键洞察
读取 Excel 的套路:
第一行 = 表头(做字典 key)
从第二行开始 = 真实数据
zip (表头,行) → 自动变成字典
写入 Excel 的套路:
data = {工作表名: [行 1, 行 2, 行 3]}
循环 sheet → 不存在就创建 → 逐行 append
最后删除默认空 Sheet
text_columns 实现 “只读取需要的列”,过滤无用列,轻量干净。
四、关键代码/可复用片段
1. Excel 读取
import openpyxldef read_excel(filepath, sheet_name=None): wb = openpyxl.load_workbook(filepath) ws = wb[sheet_name] if sheet_name else wb.active headers = [c.value for c in ws[1]] docs = [] for row in ws.iter_rows(min_row=2, values_only=True): doc = dict(zip(headers, row)) docs.append(doc) return docs
2. Excel 写入
def write_excel(data, filepath): wb = openpyxl.Workbook() for sheet, rows in data.items(): ws = wb.create_sheet(sheet) for r in rows: ws.append(r) if 'Sheet' in wb.sheetnames: wb.remove(wb['Sheet']) wb.save(filepath)