开发
成果示例
把 9 家门店的月度销售文件合并成一份 Excel 报表
如何运行
python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO 文件夹:sales/2026-10,找到 9 个文件
2026-11-02 09:14:03 INFO shop-01.csv:1,284 行
2026-11-02 09:14:04 INFO shop-02.xlsx:967 行
2026-11-02 09:14:04 WARN shop-07.csv:跳过 3 行缺少价格的记录(第 88、412、913 行)
2026-11-02 09:14:05 INFO 完成:10,412 行 -> report-2026-10.xlsx(工作表“销售”和“汇总”)
改设置,不改代码
每家门店的列名都写在 settings.ini 中,所以新增一家门店或某列改了名,只需在那里改一行:
[columns]
date = 日期, 销售日期, 日
product = 商品, 品名, 名称
quantity = 数量, 件数, 个数
price = 价格, 单价
部分代码
def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
"""读取一家门店的文件,并把列名改为报表使用的列名。"""
table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
renamed = {}
for name, variants in columns.items():
found = next((c for c in table.columns if c.strip() in variants), None)
if found is None:
raise ReportError(f"{path.name}:找不到“{name}”对应的列(已查找 {', '.join(variants)})")
renamed[found] = name
table = table.rename(columns=renamed)[list(columns)]
table["shop"] = path.stem
return table
**文件:**一个 ZIP 压缩包,内含 merge_sales.py(310 行)、settings.ini、requirements.txt 和 README,说明如何安装 Python、运行脚本以及日志中每条消息的含义。客户在自己的电脑上运行。
**客户:**一家拥有 9 家门店的小型文具连锁店;每家门店每月以 CSV 或 Excel 文件发送当月销售数据,各自的列名略有不同。 **任务:**一个脚本,读取文件夹中的所有文件,把各列统一成同一格式,并生成一份 Excel 报表,包含全部销售记录和一张按门店汇总的工作表。
客户及所有信息均为虚构。
服务介绍
供应商价目表、银行或电商平台报表以及库存清单往往只有 PDF 版本,把其中的表格复制到 Excel 时,列就乱了。这个 Python 脚本读取 PDF 中的表格,并把它们写入 Excel 或 CSV,各列各就各位:它会把跨越多页的表格接起来,去掉重复的表头行和页脚;从标准版起,还会把 1 234,50 或 (120.00) 这样的写法转成真正的数字,把日期转成日期格式。脚本会针对您文件的版式进行调整,所以请发来一两个典型的 PDF,或版式相同、数据虚构的文件。PDF 必须包含真实文字,大多数从程序中保存的文件都是这样;扫描件和纸质文件的照片需要文字识别,不在本服务范围内。脚本由您自己运行,并请核对合计数。
服务内容
- 您将获得一个 ZIP 压缩包,内含 Python 脚本、附分步说明的 README,从标准版起还包含写有列名和页码的设置文件;订单页面上也能查看代码。
- 针对您的版式调整根据您发来的示例文件编写和测试
- 各列各就各位PDF 中的一行就是 Excel 中的一行
- 多页拼接长表格合成一个工作表,不重复表头
- 真正的数字从标准版起,金额和日期可以求和、排序
- 代码易读附有注释,版式变化时容易调整
服务流程
- 1示例您发来一两个典型的 PDF,并指出需要的表格
- 2代码我们针对该版式编写脚本和运行说明
- 3试用您在自己的文件上运行,并对照 PDF 核对合计数
- 4修改您在套餐范围内提出修改,如有报错信息请一并发来
需要您提供的信息
一两个您常收到的那类典型 PDF(或版式相同、姓名和数据虚构的文件),您需要哪几页上的哪张表格,以及想在 Excel 中保留哪些列。其中数字的写法(逗号、空格、负号或括号)和日期格式。您所有的文件是同一种版式,还是有好几种,您大约要处理多少个文件,以及您的系统:Windows、macOS 还是 Linux。
我们会询问您:
- 这些 PDF 是什么?
- 在 Excel 中需要哪些列?
- 您的文件都长得一样吗?
- 在哪里运行?
套餐对比
付款保障
您在下单时付款,但款项仅在您验收后才会结算。
- 固定价格付款后套餐价格不会变动。
- 款项先冻结付款时,这笔金额只是被冻结。您验收后,款项才会结算给平台。
- 交付前检查每份成果在送达您之前都会经过质量检查,验收前您可以在订单页面查看。
- 免费修改在需求说明范围内,您可以在套餐允许的次数内提出修改。
- 3 天后自动验收如果交付后 3 天内您既未验收也未提出修改,工作将自动验收。如果您在交付后于订单聊天中留言,订单将暂停自动验收;我们回复后,可能会重新开始计算 3 天,并会在聊天中告知您。
- 返工或全额退款如果成果与您的需求说明不符且修改后仍未解决,或工作耗时超过交付期限的两倍,请在订单聊天中留言:我们将为您返工或全额退款。
问题与解答
任何 PDF 都适用吗?
它是针对您示例文件的版式制作的。如果供应商改了版式,脚本可能需要调整。扫描件等不含真实文字的 PDF 不在适用范围内。
怎么知道我的 PDF 是否包含真实文字?
打开文件,试着用鼠标选中一个词。如果能选中并复制,就是真实文字。如果整页被当成一张图片选中,那就是扫描件。
会出错吗?
会,PDF 中的表格并不是以表格形式存储的,所以一行不寻常的内容就可能打乱一行数据。因此脚本会记录它没有把握的页面,在使用结果之前,您应该对照 PDF 核对合计数。
我必须发送真实的报表吗?
不必。版式相同、数据虚构的文件效果一样好,之后脚本会在您的电脑上处理真实文件。
没有找到答案?


