First Commit

This commit is contained in:
yangfan
2025-10-17 13:40:44 +08:00
commit c21e3189e3
16 changed files with 4477 additions and 0 deletions

360
User.md Normal file
View File

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