9.0 KiB
财务Excel数据处理程序 - 使用说明
概述
本程序用于处理财务Excel数据,自动提取收款信息并生成会计分录表。
前置要求
运行环境
- Python版本: Python 3.x
- 操作系统: Windows / Linux / macOS
依赖库安装
本程序依赖以下Python第三方包:
1. openpyxl
用途: Excel文件读写操作
安装命令:
pip install openpyxl --break-system-packages
或使用虚拟环境(推荐):
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
# Linux/Mac:
source venv/bin/activate
# Windows:
venv\Scripts\activate
# 安装依赖
pip install openpyxl
版本要求: 建议使用最新稳定版本
验证安装
安装完成后,可以通过以下命令验证:
python3 -c "import openpyxl; print(openpyxl.__version__)"
如果输出版本号(例如: 3.1.2),则说明安装成功。
功能说明
1. 数据提取 (process_excel.py)
从Excel文件中提取财务数据并输出为JSON格式。
输入文件: data/data.xlsx (Sheet1)
输出文件: res.json
提取字段:
ReceivedAmount: 实收金额 (F列)HandlingFee: 手续费 (G列,空值记为0)Order: 订单列表OrderNum: 订单号 (H列,可以为空)Amount: 金额 (I列,必需)AccountName: 账户名称 (O列)
checkRes: 验证结果 (实收金额+手续费 = 订单金额之和)
运行命令:
python3 process_excel.py
输出示例:
[
{
"ReceivedAmount": 12125,
"HandlingFee": 25,
"Order": [
{
"OrderNum": "XLRQD300T25",
"Amount": 550,
"AccountName": "24台湾长荣航运"
}
],
"checkRes": true
}
]
2. 会计分录生成 (generate_accounting_entries.py)
根据res.json生成标准会计分录表。
输入文件: res.json
输出文件: AccountingEntries.xlsx
运行命令:
python3 generate_accounting_entries.py
会计分录规则
基本规则
每笔到账金额产生以下分录:
-
到账金额 - 借方 (每笔记录1条)
- 科目代码:
1002.02 - 科目名称:
银行存款 - 中行USD - 摘要:
美金收款-{OrderNum}(如果OrderNum为空,则为美金收款) - 币别: 美元
- 原币金额: ReceivedAmount
- 金额: ReceivedAmount × 汇率
- 科目代码:
-
手续费 - 借方 (如果手续费>0)
- 科目代码:
5603.03 - 科目名称:
财务费用-手续费 - 摘要:
美金收款-{OrderNum}(如果OrderNum为空,则为美金收款) - 币别: 人民币
- 金额: HandlingFee × 汇率
- 科目代码:
-
订单明细 - 贷方 (每个Order记录1条)
- 科目代码:
1122 - 科目名称:
应收账款 - 应收账款: Order.Amount (显示在"应收账款"列)
- 摘要:
美金收款-{OrderNum}(如果OrderNum为空,则为美金收款) - 币别: 美元
- 原币金额: Order.Amount
- 金额: Order.Amount × 汇率
- 科目代码:
特殊规则
- 摘要处理:
- OrderNum有值时: 摘要为
美金收款-{OrderNum} - OrderNum为空时: 摘要固定为
美金收款
- OrderNum有值时: 摘要为
- 金额验证: checkRes为false的记录,所有相关分录行标记为粉红色背景(#FAD1D4)
- 单元格合并: 同一笔到账金额的所有分录,"到账金额"和"手续费"列会合并显示
- 空值处理:
- 订单金额为空的订单会被跳过,不生成贷方分录
- 订单号(OrderNum)可以为空,允许记录
汇率配置
程序支持两种方式设置汇率:
方法一: 使用汇率文件 (推荐)
在程序目录下创建 exchange_rate.txt 文件,文件中只包含汇率数值。
操作步骤:
# 创建汇率文件
echo "7.25" > exchange_rate.txt
# 运行程序,会自动读取该文件中的汇率
python3 generate_accounting_entries.py
输出示例:
从 exchange_rate.txt 读取汇率: 7.25
使用汇率: 7.25
注意事项:
- 汇率值必须是有效数字
- 汇率范围: 0.1 ~ 100 (超出范围会使用默认汇率)
- 文件格式错误会自动使用默认汇率
方法二: 修改程序默认值
编辑 generate_accounting_entries.py 文件第13行:
DEFAULT_EXCHANGE_RATE = 7.1072 # 修改此默认值
默认汇率: 7.1072
优先级: 汇率文件 > 程序默认值
文件说明
| 文件名 | 说明 |
|---|---|
data/data.xlsx |
原始财务数据Excel文件 |
process_excel.py |
Excel数据提取程序 |
res.json |
提取的财务数据(JSON格式) |
generate_accounting_entries.py |
会计分录生成程序 |
AccountingEntries.xlsx |
生成的会计分录表 |
exchange_rate.txt |
汇率配置文件(可选) |
analyze_excel.py |
Excel结构分析工具(可选) |
使用流程
标准流程
-
准备数据
# 确保 data/data.xlsx 文件存在 -
提取数据
python3 process_excel.py # 输出: res.json -
生成会计分录
python3 generate_accounting_entries.py # 输出: AccountingEntries.xlsx -
检查结果
- 打开
AccountingEntries.xlsx - 粉红色背景的行表示金额不匹配,需要核对
- 打开
数据验证
checkRes字段说明
- true: 实收金额 + 手续费 = 订单金额之和 (误差<0.01)
- false: 金额不匹配,需要人工核对
识别问题记录
在 AccountingEntries.xlsx 中:
- 粉红色背景(#FAD1D4)的行表示该笔记录金额不匹配
- 建议优先核对这些记录
常见问题
Q1: 如何处理合并单元格?
程序自动处理F列的合并单元格:
- 合并单元格: 该区域内所有行属于同一笔记录
- 非合并单元格: 每行单独处理
Q2: 手续费为空怎么办?
程序自动将空值记为0。
Q3: 订单号(OrderNum)为空怎么办?
订单号为空是允许的,程序会记录该订单。生成的会计分录摘要会显示为 美金收款(而不是 美金收款-{OrderNum})。
Q4: 订单金额为空怎么办?
金额为空的订单会被跳过,不生成贷方分录。
Q5: 如何修改汇率?
推荐方法: 创建 exchange_rate.txt 文件,输入汇率值即可。
echo "7.25" > exchange_rate.txt
备选方法: 编辑 generate_accounting_entries.py 第13行的 DEFAULT_EXCHANGE_RATE 值。
Q6: Excel列对应关系
| 字段 | Excel列 | 说明 |
|---|---|---|
| ReceivedAmount | F | 实收金额 |
| HandlingFee | G | 手续费 |
| OrderNum | H | 订单号 |
| Amount | I | 解款金额 |
| AccountName | O | 金蝶名称 |
输出示例
res.json 示例
[
{
"ReceivedAmount": 9455,
"HandlingFee": 25,
"Order": [
{
"OrderNum": "XLRQD063M25",
"Amount": 9480,
"AccountName": "20 Transsea"
}
],
"checkRes": true
}
]
AccountingEntries.xlsx 结构
| 到账金额 | 手续费 | 订单号 | 应收账款 | 金蝶名称 | 摘要 | 借/贷 | 科目代码 | 科目名称 | 核算项目 | 币别 | 汇率 | 原币金额 | 金额 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 9455 | 25 | XLRQD063M25 | 20 Transsea | 美金收款-XLRQD063M25 | 借 | 1002.02 | 银行存款 - 中行USD | 20 Transsea | 美元 | 7.1072 | 9455 | 67,188.54 | |
| (合并) | (合并) | XLRQD063M25 | 美金收款-XLRQD063M25 | 借 | 5603.03 | 财务费用-手续费 | 人民币 | 177.68 | |||||
| (合并) | (合并) | XLRQD063M25 | 9480 | 20 Transsea | 美金收款-XLRQD063M25 | 贷 | 1122 | 应收账款 | 20 Transsea | 美元 | 7.1072 | 9480 | 67,366.22 |
注意事项
- 数据起始行: 程序从第2行开始读取(第1行为表头)
- 汇率固定: 默认使用固定汇率7.1072,不会从Excel读取
- 金额精度: 计算结果保留2位小数
- 合并单元格: "到账金额"和"手续费"列会自动合并
- 背景标记: checkRes=false的记录用粉红色标记
- 文件编码: 所有文件使用UTF-8编码
更新记录
-
v1.3 - 2025-10-17
- 支持OrderNum为空的订单记录
- 修改数据提取逻辑: 允许OrderNum为空,只跳过Amount为空的订单
- 优化摘要生成: OrderNum为空时摘要显示为
美金收款 - 确保所有数据行都被正确记录和处理
-
v1.2 - 2025-10-17
- 新增汇率文件支持: 可通过
exchange_rate.txt设置汇率 - 智能汇率验证: 自动检测异常汇率并回退到默认值
- 改进错误处理: 汇率文件异常时提供详细提示信息
- 新增汇率文件支持: 可通过
-
v1.1 - 2025-01-17
- 优化会计分录规则: 移除"到账金额-贷方"记录
- 每个Order记录都生成对应的贷方分录
- Order生成的贷方记录在"应收账款"列显示Amount金额
- 简化单订单处理逻辑
-
v1.0 - 2025-01-17
- Excel数据提取
- 会计分录生成
- 合并单元格支持
- 金额验证功能
- 背景色标记
联系支持
如遇问题或需要帮助,请检查:
- Excel文件格式是否正确
- 列映射是否匹配
- Python依赖是否已安装
- 汇率设置是否正确