夜雨聆风学习资料网

ARTICLE · 1325847

几十个 Excel 表手动复制到崩溃?让 AI 写个 Python 脚本一键合并(附报错速查)

几十个 Excel 表手动复制到崩溃?让 AI 写个 Python 脚本一键合并(附报错速查)

导语:月底汇总,几十个部门、几十个月份的 Excel 表,一个个打开、复制、粘贴,一下午就没了,还容易漏行。今天教你让 AI 写一个 Python 小脚本:把表格扔进一个文件夹,运行一条命令,几秒钟合并成一张总表,还会自动标出每一行来自哪个文件。零基础也能跟着做,代码我已经实测跑通,最后附常见报错速查和改需求的提示词。

先看效果

假设你有一个叫“表格”的文件夹,里面放着 1月销售.xlsx、2月销售.xlsx、3月销售.xlsx……每个表的表头都一样(日期、产品、销售额)。运行脚本后,旁边会多出一个 合并结果.xlsx,所有数据上下拼在一起,最前面多一列“来源文件”。终端里会显示:

已读取 1月销售.xlsx:5 行已读取 2月销售.xlsx:5 行已读取 3月销售.xlsx:5 行跳过 坏文件.xlsx:Excel file format cannot be determined, you must specify an engine manually.完成!共合并 3 个文件、15 行,结果保存在 ……\合并结果.xlsx

注意最后那个“坏文件”:打不开的文件会被跳过并提示原因,而不是让整个程序崩掉。原始表格脚本只读不改,放心用。

第一步:安装 Python 和两个工具包

去 Python 官网 python.org 下载安装最新版。Windows 用户安装时一定要勾选“Add python.exe to PATH”,这是新手最常踩的坑。

装好后打开命令行(Windows 按 Win+R 输入 cmd 回车;Mac 打开“终端”),输入下面的命令安装两个工具包:pandas 负责处理表格数据,openpyxl 负责读写 xlsx 文件。

# Windowspython -m pip install pandas openpyxl# Mac(命令是 python3)python3 -m pip install pandas openpyxl

看到“Successfully installed”就说明装好了。

第二步:这样跟 AI 提需求

写代码之前,先把你的情况描述清楚。下面这段提示词可以直接复制,把括号里的内容换成你自己的:

我是办公室文员,完全不会编程。请帮我写一个 Python 脚本:1. 读取“表格”文件夹里所有 .xlsx 文件(每个文件表头相同,表头在第 1 行);2. 把它们上下合并成一张表,最前面加一列“来源文件”写上文件名;3. 跳过 Excel 打开时产生的 ~$ 开头的临时文件;4. 某个文件读取失败时打印原因并跳过,不要让程序中断;5. 结果保存为“合并结果.xlsx”,不要修改原文件;6. 需要我改的设置集中写在代码最上面,并加上中文注释。

第三步:复制代码,运行

新建一个文件夹,比如叫“合并工具”。在里面新建文本文件,改名为 merge_excel.py,粘贴下面的代码保存;再在同一位置建一个子文件夹“表格”,把要合并的 Excel 都放进去。

from pathlib import Pathimport pandas as pd# ===== 只需要改这里 =====FOLDER = Path("表格")          # 放 Excel 的文件夹OUTPUT = Path("合并结果.xlsx")  # 合并后的文件名HEADER_ROW = 0                 # 表头在第几行:第 1 行填 0,第 2 行填 1# ========================files = sorted(    f for f in FOLDER.glob("*.xls*")    if not f.name.startswith("~$")      # 跳过 Excel 打开时生成的临时文件    and f.resolve() != OUTPUT.resolve()  # 跳过结果文件本身)if not files:    raise SystemExit(f"在 {FOLDER.resolve()} 里没找到 Excel 文件,检查一下路径")frames = []for f in files:    try:        df = pd.read_excel(f, header=HEADER_ROW)  # 默认读第一个工作表    except Exception as e:        print(f"跳过 {f.name}:{e}")        continue    df.columns = [str(c).strip() for c in df.columns]  # 去掉表头里多余的空格    df.insert(0, "来源文件", f.name)                     # 记下每行来自哪个文件    frames.append(df)    print(f"已读取 {f.name}:{len(df)} 行")if not frames:    raise SystemExit("没有成功读取任何文件")result = pd.concat(frames, ignore_index=True)result.to_excel(OUTPUT, index=False)print(f"完成!共合并 {len(frames)} 个文件、{len(result)} 行,结果保存在 {OUTPUT.resolve()}")

然后在命令行里进入“合并工具”文件夹。最简单的办法:先输入 cd 和一个空格,再把文件夹直接拖进命令行窗口,回车。接着运行:

python merge_excel.py      # Windowspython3 merge_excel.py     # Mac

几秒后,“合并工具”文件夹里就会出现合并好的总表。

代码说人话

  • FOLDER.glob("*.xls*"):
    找出文件夹里所有后缀以 .xls 开头的文件,xlsx 也包含在内。
  • pd.read_excel:
    把一个 Excel 读成一张“数据表”,默认读第一个工作表。
  • str(c).strip():
    去掉表头前后多余的空格。“销售额”和“销售额 ”在人眼里一样,在电脑眼里是两列,这一步就是防这个坑的。
  • pd.concat:
    把所有数据表上下拼起来。
  • to_excel:
    保存成新文件,index=False 表示不要多出一列行号。

常见报错速查

  • “'python' 不是内部或外部命令”:
    安装时没勾 PATH。重新运行安装包,选“Modify”,勾上相关选项,或者卸载重装时勾选。
  • ModuleNotFoundError: No module named 'pandas':
    工具包没装好,重新执行第一步的安装命令。
  • 提示 Import openpyxl failed:
    少了 openpyxl,运行 python -m pip install openpyxl。
  • 老格式 .xls 文件读不了:
    再装一个 xlrd:python -m pip install xlrd,或者用 Excel 打开后另存为 .xlsx。
  • PermissionError: [Errno 13] Permission denied:
    合并结果.xlsx 正在 Excel 里开着,关掉再运行。
  • Excel file format cannot be determined:
    这个文件不是真正的 Excel(比如被人手动改过后缀,或已损坏),用 Excel 打开后另存为 .xlsx。
  • 合并后多出很多空白列:
    几个表的列名不一致,比如有的叫“销售额”有的叫“金额”。把列名改统一,或者让 AI 帮你加一段“列名对照表”。
  • 表头不在第一行(上面有标题行):
    把代码顶部的 HEADER_ROW 改成 1 或 2。

遇到这里没写到的报错,把完整的报错信息和你的代码一起发给 AI,说明“我运行时出现这个错误,请告诉我原因和改法”,基本都能解决。

让 AI 改需求的提示词

实际工作中需求经常会变。比如每个文件里有“北京”“上海”等多个工作表,也要全部合并。把代码发给 AI,然后这样说:

这是我现在的合并脚本(附上代码)。请修改为:读取每个 Excel 文件里的所有工作表,全部合并到一起,在“来源文件”后面再加一列“工作表”,写上工作表名称。其他功能保持不变。

AI 改完后,核心只是把读取那一行换成读所有工作表,再多套一层循环。下面这段是我实测可用的改法:把原代码中从 df = pd.read_excel 那一行,到 print(f"已读取 那一行为止,整段替换成:

        sheets = pd.read_excel(f, header=HEADER_ROW, sheet_name=None)  # 读所有工作表    except Exception as e:        print(f"跳过 {f.name}:{e}")        continue    for sheet_name, df in sheets.items():        df.columns = [str(c).strip() for c in df.columns]        df.insert(0, "来源文件", f.name)        df.insert(1, "工作表", sheet_name)        frames.append(df)        print(f"已读取 {f.name} / {sheet_name}:{len(df)} 行")

还可以试试这些需求:

  • 只保留“日期、产品、销售额”三列,其他列丢掉;
  • 合并后按日期从早到晚排序,并在最后一行加一个合计;
  • 反过来:把一张总表按“部门”列拆成多个文件。

最后

第一次跑通可能要花半小时,但以后每个月的汇总都只要几秒。建议第一次用时先拿复制出来的几个表做测试,确认结果没问题再处理正式数据。

你工作中还有哪些重复到想哭的表格操作?写在留言区,下期挑一个最常见的,带大家用 AI 搞定。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料