在用户需要处理 Excel 文件、表格数据、批量转换或报表生成时应用本 skill。
你想做的事调用的脚本典型参数多个 Excel 或多个 sheet 合成一张表merge_sheets.py--inputs 文件或目录 --output out.xlsx把某 sheet 导出成 CSVexcel_to_csv.py--input file.xlsx --output file.csv把 CSV 转成 Excelcsv_to_excel.py--input a.csv --output a.xlsx 或 --inputs a.csv b.csv按条件筛选行(等于/大于/包含)filter_excel.py--where "列名=值" 或 "列名>100"、 "列名~北京"按行数拆成多个文件,或按某列取值拆分split_excel.py--by-rows 5000 或 --by-column 地区按某列去重deduplicate_excel.py--keys 编号 --keep first/last按列分组并求和/计数/平均aggregate_excel.py--group-by 地区 --agg "销售额:sum"检查必须列、重复键、空行validate_excel.py--require-cols 列名 --key-cols 列名只保留/重命名部分列select_columns.py--columns 列1,列2 --rename "旧:新"两个表按一列对齐合并(VLOOKUP)merge_tables.py--left a.xlsx --right b.xlsx --on 键列主表依次跟多个表做 VLOOKUPvlookup_multi.py--main 主.xlsx --lookups "表1.xlsx:键列" "表2.xlsx:键列"行列转置transpose_excel.py--input in.xlsx --output out.xlsx用数据表按行填模板里的 {{列名}}template_fill.py--template t.xlsx --data d.csv --output out.xlsx重命名工作表rename_sheets.py--rename "Sheet1:新名" 或 --prefix "2024_"条件格式(大于/小于/重复值/色阶)format_conditional.py--column C --rule gt --value 100 --fill red某列当文本显示,避免科学计数法format_columns_as_text.py--columns 身份证号,订单号
本地直接运行:进入本 skill 所在目录(或把 scripts/ 加入路径),先 pip install -r scripts/requirements.txt,再执行 python scripts/脚本名.py --help 看参数,或按上表传参运行。
openpyxl(保留格式、公式、多工作表)pandas + openpyxl 引擎xlrd(只读)优先用 openpyxl 做单元格级操作和格式保留;需要筛选、聚合、合并多表时用 pandas。
bash
pip install openpyxl pandas xlrd
或使用 skill 自带: pip install -r scripts/requirements.txt
整表为 list of dict(保留表头):
python
import openpyxl
wb = openpyxl.load_workbook("input.xlsx", read_only=True, data_only=True)
ws = wb.active # 或 wb["Sheet1"]
rows = list(ws.iter_rows(min_row=1, values_only=True))
header = rows[0]
data = [dict(zip(header, row)) for row in rows[1:]]
wb.close()
用 pandas(适合分析、过滤、合并):
python
import pandas as pd
df = pd.read_excel("input.xlsx", sheet_name=0, engine="openpyxl")
# sheet_name 可为 0、"Sheet1" 或 [0, 1] 多表
指定区域:
python
# openpyxl
for row in ws["A1:D10"]:
...
# pandas
df = pd.read_excel("input.xlsx", usecols="A:D", header=0, nrows=100)
新建并写入(openpyxl):
python
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
wb = Workbook()
ws = wb.active
ws.title = "结果"
ws.append(["列A", "列B", "列C"])
for row in data_rows:
ws.append(row)
ws["A1"].font = Font(bold=True)
wb.save("output.xlsx")
用 pandas 写出多表:
python
with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer:
df1.to_excel(writer, sheet_name="汇总", index=False)
df2.to_excel(writer, sheet_name="明细", index=False)
追加到已有文件(先加载再写):
python
wb = openpyxl.load_workbook("existing.xlsx")
ws = wb["Sheet1"]
for row in new_rows:
ws.append(row)
wb.save("existing.xlsx")
任务做法多文件合并merge_sheets.py 或 pandas read_excel + pd.concat + to_excel。CSV ↔ Excelexcel_to_csv.py / csv_to_excel.py 或 pandas 读写。按条件筛选filter_excel.py 或 df[df["列"] == 值] / df.query()。按行/按列拆分split_excel.py(按行数或按某列取值分文件)。去重deduplicate_excel.py 或 df.drop_duplicates(subset=["列"], keep="first")。按列聚合aggregate_excel.py 或 df.groupby("列").agg({"数值列": "sum"})。校验validate_excel.py。选择/重命名列select_columns.py。两表按键合并merge_tables.py(left/inner/outer)。行列转置transpose_excel.py。模板填充template_fill.py({{列名}} 占位符)。重命名 sheetrename_sheets.py。多表 VLOOKUPvlookup_multi.py(主表 + 多个查找表依次左连接)。条件格式format_conditional.py(大于/小于/介于/重复值/色阶)。列格式为文本format_columns_as_text.py(避免长数字科学计数法)。保留原格式写数据用 openpyxl 加载原文件,只改写目标单元格,再 save。
当用户需要处理目录下多个 Excel 时:
pathlib.Path("目录").glob("*.xlsx") 枚举文件。原名_out.xlsx 等约定;在 SKILL 中明确输出命名规则。Path(file).exists() 检查文件存在。write_only=True 或分块。openpyxl.utils.exceptions.InvalidFileException、 KeyError(工作表名)等并返回可读错误信息。skill 目录下 scripts/ 提供可执行脚本,优先在用户环境中运行脚本而非临时写长代码。
脚本功能merge_sheets.py多 Excel 或同文件多 sheet 合并为一张表excel_to_csv.py指定 sheet 导出为 CSVcsv_to_excel.pyCSV 转 Excel(单/多 CSV → 多 sheet)filter_excel.py按列条件筛选(=、>、<、~ 包含)输出 Excel/CSVsplit_excel.py按行数分片或按某列取值拆成多个文件deduplicate_excel.py按指定列去重,保留 first/lastaggregate_excel.py按列分组聚合(sum/count/mean/min/max)validate_excel.py校验必须列、重复键、空行select_columns.py选择/重命名/排序列merge_tables.py两表按键列合并(VLOOKUP 式,left/inner/outer)transpose_excel.py行列转置template_fill.py用数据表按行填充模板中的 {{列名}} 占位符rename_sheets.py重命名工作表(原名:新名、索引:新名、前缀/后缀)vlookup_multi.py多表 VLOOKUP:主表依次与多个查找表左连接format_conditional.py按条件格式化(gt/lt/介于/重复值/色阶)format_columns_as_text.py将指定列设为文本格式,避免纯数字显示为科学计数法
用法见各脚本 --help 或 reference.md。