用户上午答复了昨天悬置的 4 个口径问题:
| # | 问题 | 用户答复 |
|---|---|---|
| 1 | 编号 4「投资系统每月导入的项目表」文件名/路径 | 已放在「输入」文件夹里(实测即 输入\模板_查询结果(投资系统-客运+物流 2026.7).xls,149 行 × 8 列,B 列「单位」= 项目名称,G 列「自年初-累计完成投资」) |
| 2 | 同名项目跨市州怎么处理 | 不能动项目名称,按市州报上来的项目名称比对更新;一般不会出现,**出现就弹窗提示** |
| 3 | 1 月的上月基数从哪取 | 上年 12 月的明细表 |
| 4 | 名称不一致怎么办 | 先出一份映射表看看,先不改程序 |
| 5 | 输出命名与格式「你怎么看」 | 已按我的建议回复「可以你做」 |
据此完成了需求文档「十一、开工顺序建议」的第 1、2 步(这两步不需要再等业务信息):
潜江传化2022.3、2026.7 的表里);襄阳客运 .et 格式且列位右移 1 列;全部文件的数据区都混排着市州行/分类行/小计行/空行。Sheet2 且无序号列。字段映射表_草案_2026-07.xlsx(7 个 sheet:说明与口径 / 源文件标准列位 / 逐市州列位映射 / 明细表→目标表映射 / 投资系统项目表字段 / 差异与待确认清单 / 输出命名与格式建议)。docs\投资\工具\格式探测.py:只读扫描任意月份的源文件,输出 .md + .tsv。python docs\投资\工具\格式探测.py --month 2026-09 即可复跑。best[2] 越界、xlrd 未入 path、无序号行漏判、多工作表取到历史月)。2026年全省预安排计划进度情况汇总)没有「其中:本月完成投资」列(现有 I=自开始建设累计、W=1-X月累计完成投资、X=实际进度),需求文档写的 4 项指标与模板列对不上,第 ③ 项落在哪一列?规上项目表 没有「自开始建设累计 / 自年初累计」列,需求文档写的「更新 3 项」如何映射?docs\投资\ 下用户自己的文件整理(模板_查询结果...xls 移到 输入\、X月... 改名、两个模板被替换等)仍在工作区未提交,等用户确认后再一起提交。http://61.183.254.94:3000)仍不通;2026-06 / 2026-09 无汇总大表母版;h2031 缺 2025-01;passenger_individual_monthly 2026-08 缺黄冈。校验报错_<年月>.xlsx 与 运行日志_<年月>.md。docs\投资\ 的文件整理,一并提交并补推公司 gitea(若恢复)。| 用户反馈 | 核查结论 | 处置 |
|---|---|---|
| ① ②「你把表说清楚,是客运站还是物流园区;我看十堰的表没有你说的情况」 | 用户没看错:那些内容是**隐藏行 / 隐藏表**。例:十堰物流 R11—R63(53 行)是隐藏行,内容为「武汉」历史区块;潜江 26/27 张表被隐藏 | 新增只读工具 隐藏项探测.py + 清单《隐藏数据核实清单_2026-07.md》(逐文件写清:品类/文件/工作表/隐藏行区间/隐藏内容/怎么取消隐藏自己验证) |
③「.et 右移不用管,我们只管要更新的字段」 |
与程序实现方向一致 | 差异报告、映射表均标注「不做处理」 |
| ④「恩施和黄石也是分了的,只是没在表头写;不更新建设阶段列」 | 与源文件相符 | 该风险项**关闭** |
潜江2026.07.xlsx 只有 1 张可见表,表名叫 潜江传化2022.3,装的却是 2026 年 7 月数据。RQYQRYQS 含 Excel 4.0 宏病毒残留字样(Classic.Poppy by Vic / Infect Workbook),已建议用户杀毒(我不动源文件)。格式探测.py 增加**市州分段**(CITIES + city_segments()):十堰物流项目行由 38 行修正为 7 行;与旧结果逐文件 diff,其余 26 个文件**零变化**(无回归)。字段映射表_草案_2026-07.xlsx 被 WPS 打开占用(目录下存在 ~$字段映射表_草案_2026-07.xlsx 锁文件),PermissionError。订正脚本 _qa_out\patch_map.py 已备好,**关闭该文件后重跑即可**(会补上 Sheet3 的「隐藏项核实」列、修正十堰/林区/潜江/黄石等行,Sheet6 更新十堰、潜江林区、襄阳、恩施黄石,并新增「隐藏行不能当过滤条件」一条)。.et 可读性订正 + 待确认清单)用户确认要我先核实。逐个把 HEAD 版本与工作区版本做**逐单元格比对**:
| 文件 | 结果 |
|---|---|
输入\客运(客运站)\7月\2026年7月站场固投(南山、汉口站).xlsx |
数据 0 处差异(10×15 全同) |
输入\客运(客运站)\7月\襄阳市道路运输服务中心2026年6月投资 (1).et |
7 张分月表**逐张 0 处差异** |
模板\模板_全省预安排计划进度情况汇总.xls |
数据 0 处差异(272×28 全同) |
模板\模板_经济强县投资统计报表.xls |
数据 0 处差异(45×17 全同) |
→ 字节差异只是 Excel/WPS 重新保存造成的格式重写,**没有数据风险**;是否还原等用户拍板。
.et 其实能读之前把 .et 当成「xlrd/openpyxl 都读不了,必须 Excel COM」。实测文件头是 D0CF11E0A1B11AE1——**OLE2 复合文档 / BIFF8**,xlrd 直接就能读:襄阳客运 .et 的 7 张分月表全部读出(2026年1月—2026年7月)。已修两个工具与差异报告/核实清单/映射表,隐藏项探测覆盖由 26 个文件扩到 27/27。
按用户要求把开工前必须定的口径做成「勾选版」确认表(13 条),每条都给现状 + 选项 + 我的建议:
- 阻塞 Step1 的 5 条:明细表更新哪几列、客运缺 7 市州怎么处理、校验的上月底数从哪来、潜江只有 1 个项目行、武汉简表无建设阶段列;
- Step2/3 的 4 条:汇总表更新哪些列(含 W=1-7月累计 表头要不要跟着月份改)、亿元投资项目「3 项」是哪三项、1 月基数取哪列、编号 3/4 是否同一份文件;
- 收尾 4 条:输出目录/命名/备份、4 个被改文件是否还原、docs\投资\ 未提交改动是否提交、"每月是否还要做模板"(用户说要请教同事,暂缓)。
映射表新增 Sheet8「口径确认_2026-09-17」,作为 Step1 实现的**唯一依据**:
| 项 | 用户答复 | 落地口径 |
|---|---|---|
| Q1 明细表更新哪几列 | C | H/I/J/K/L/M 六列全写 |
| Q2 客运缺 7 市州 | C | 跳过 + 提示 + 保留上月数据 |
| Q3 上月底数来源 | A | 从系统目标表读上月值 |
| Q4 潜江仅 1 个项目行 | A | 照常写 |
| Q5 武汉简表 | 留空 | L/M 两列都留空 |
| Q6 汇总表 | A | 只更 I/W/X;W 表头「1-X月」随月份自动改 |
| Q7 亿元投资项目 | 只更 F 列 + 新增「2026年X+1月实际完成投资」列 | Step3 执行 |
| Q8 1 月基数 | A | 1 月 J = K(跨年清零) |
| Q9 编号 3/4 | 同一份文件,放一份 | 唯一文件:输入\模板_查询结果(投资系统-客运+物流 2026.7).xls |
| Q10 输出目录 | 输出\Y年Y月 | 输出\2026年7月\ |
| Q11 4 个被改动文件 | (用户反问)已解释:数据 0 差异,随本次提交 | 不做还原 |
| Q12 docs\投资 整理 | A | 已提交入库(17 个变更,含 3 个 git 识别出的重命名) |
| Q13 每月是否还做模板 | 暂缓 | 等同事结论 |
2af4d53 → 73a0551:入库用户整理后的输入/模板/输出文件 + 回填口径确认.gitignore 补上 __pycache__/、*.pyc新增 docs\投资\工具\市州月报解析.py(只读):27 个源文件 → 151 个项目行(客运 48 + 物流 103),输出 解析结果_2026-07.tsv + 解析报告_2026-07.md。
CITY_OVERRIDE 登记为武汉。用户选定:**每月另放一份「上月」的投资系统查询结果文件**,校验等式 本月自年初累计 = 上月自年初累计 + 本月完成 用它的 G 列。程序已按此实现识别(按文件名/「时期」列自动区分本期与上月,本期缺失不影响运行、只跳过校验并提示)。
匹配与校验.py,把 Step1 的三个判断全部算出| 品类 | 目标表项目行 | 源文件行 | 精确匹配(→更新) | 需新增 | 疑似同一项目(→弹窗) | 目标表独有(保持原值) | 数值不一致 |
|---|---|---|---|---|---|---|---|
| 客运 | 49 | 48 | 45 | 3 | 0 | 4 | 0 |
| 物流 | 99 | 103 | 94 | 6 | 3 | 5 | 2 |
变更清单_2026-07.tsv 共 148 条(更新 139 + 新增 9)。鄂湘赣商贸物流中心一期⇄(一期)、荆门北站顺洋物流基地⇄…基地项目、荆门智慧冷链物流园⇄…园项目 → 不重复新增,等人工确认。九州通沃田国际供应链中心项目 的**自年初累计**:市州月报 8000 / 投资系统 4200,差 −3800 —— 这是本期唯一的实质数值不一致。神农架物流园 自开始建设累计 7535.45 vs 7535.5(差 0.05,应为舍入)。郑万高铁南漳 vs 郑万高铁巴东),已按新增处理并提示,避免误合并。变更清单_2026-07.tsv 写进两张明细表 —— 更新 6 列(H/I/J/K/L/M)、新增项目整行插入(复制相邻行格式)、校验不符按等式纠正并弹窗+记日志、输出到 输出\2026年7月\、运行前 _bak_ 备份。docs\投资\输入\(本期只放了 2026.7 那份)。《功能测试报告_投资月报匹配与校验引擎_2026-09-17.md》—— M01–M09 全部通过。
九州通沃田国际供应链中心项目 的本年计划投资也是 8000,这个是对的」。2026年7月企业月报汇总(鄂州).xls R15:G=36000(总投资) H=23504(自开始建设累计) I=8000(本年计划投资) J=4200(自年初累计) K=200(本月完成);F=8000 / G=4200。原报告里「8000 vs 4200」是**取列错位**造成的假异常。格式探测.py 新增 sheet_merges(path) / merge_span(merges, row, col);市州月报解析.py 的 pick_columns 改为:命中落在跨多列合并区时,在该区内**排除其它字段更深的子表头所占列**,只剩唯一一列才采用。解析结果 与 变更清单 各只有 4 行变化(鄂州 3 + 天门 1),其余逐字不变;项目行仍是 151 行 / 27 个文件。解析校验_<月>.tsv(源文件自洽性:项目行求和 vs 合计/小计/市州行、解析状态)。匹配与校验.py 内置 14 条检查规则,产出 弹窗提示_<月>.tsv(级别/类型/品类/市州/项目名称/来源/详情/建议动作),并把清单置顶到《匹配校验报告》。docs\投资\弹窗提示规则_2026-09-17.md(将来搬进 Java 后端按此逐条弹窗,规则不改)。| 级别 | 条数 | 主要内容 |
|---|---|---|
| 阻断 | 0 | — |
| 警告 | 9 | 源文件 vs 投资系统不一致 4、疑似同一项目 4、缺上月投资系统表 1 |
| 提示 | 36 | 将新增项目 5、名称写法不同 5、投资系统查无此项目 15、无该市州数据 2、源文件没报的项目 2 等 |
宜都供销商贸物流园 本年计划投资 12000 vs 1013、麻城市农产品综合物流园 总投资 35000 vs 33000)。docs\投资\输入\,否则月度等式校验一直跳过。| 位置 | 原实现 | 现状 |
|---|---|---|
| 市州月报 27 份源文件的字段 | 按表头关键字定位(FIELD_PAT) |
不变(本来就是按表头) |
| 源文件「序号/分类/小计合计」 | 认 A 列 | 保留(模板如此),已写进规则文档 |
| 源文件「市州行」 | 只看前 5 列 | 保留(模板如此),已写进规则文档 |
| 目标明细表(客运/物流两张) | 列号写死 B/C/D/E/F/G/H/I/J/K/L/M | 改为按表头定位,母版默认列位仅作兜底;列位与预期不符会弹窗 |
| 同名字段命中多列 | 取「命中词最短」→ 武汉物流把「自开始建设累计新增建筑面积」P 当成了「自开始建设累计完成投资」 | 改为**优先取表头下方真的有数字的那一列** |
解析报告_2026-07.md 新增「各源文件识别到的列位」一节;解析校验_2026-07.tsv 新增「列位」列。.et 是 B/H/I/J/K;随州物流名称在 A 列;武汉客运总投资在 F 列且没有「自年初累计」列表头),