# 财务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. 汇率设置是否正确