29 lines
3.7 KiB
Markdown
29 lines
3.7 KiB
Markdown
# J77PwHG2Giq4vNkQW4wclocknd8
|
|
|
|
Source: https://ocnmca6f1o0p.feishu.cn/wiki/J77PwHG2Giq4vNkQW4wclocknd8
|
|
|
|
|
|
## 工作内容概述
|
|
1、财务取数工具的预算达成情况、收入暂估与结算差异、分成暂估与结算差异、推广暂估与结算差异
|
|
## 一、解决跨平台兼容问题,固化发布流程
|
|
### (一)彻底修复WPS表头丢失问题
|
|
用通用库生成的报表,有时**Excel打开时表头经常变成空白**。排查了字体、合并单元格等常见问题都没找到原因,最后定位到是**WPS对Excel底层XML中长共享字符串的解析bug,**当字符串超过一定长度时,WPS会直接丢弃不显示。
|
|
最终解决方案是**绕过通用库的高级API,直接修改底层XML结构**:先用通用库生成基础XML,然后**自动检测所有关键表头的共享字符串引用,将它们全部转换为内联字符串直接嵌入单元格节点**。虽然文件体积略有增加,但彻底解决了跨平台表头丢失的问题。
|
|
**跨平台兼容不能依赖通用库的黑盒,遇到玄学问题必须往底层挖,直接控制最基础的规范才能保证不出错。**
|
|
### (二)解决合并单元格随机黑底问题
|
|
报表中的合并单元格偶尔会出现黑色填充,看起来像代码bug,实际是因为**合并单元格的填充样式使用了默认的auto值**,不同办公软件对这个值的解析规则不一致。
|
|
解决方法非常简单:在报表生成的最后一步,**遍历所有合并单元格,强制显式声明填充样式为"无色透明"**。一行代码就彻底消灭了这个随机出现的渲染问题。
|
|
**很多看似不稳定的bug,根源都是代码中存在太多隐式约定。用最直接的显式声明,就能以最低成本对冲所有解释器的差异。**
|
|
## 二、优化数据接入效率,增加自动化预警功能
|
|
重构了预算数据的读取和处理管线,解决了双版本预算兼容问题,同时大幅提升了数据处理速度,还增加了自动预警功能。
|
|
### (一)实现"保底"与"挑战"双版本柔性兼容
|
|
按固定列坐标读取数据的方式非常脆弱,两个版本的预算表列顺序稍有不同就会全部读错。现在彻底推翻了原来的逻辑,改用"地区-项目-科目"三个维度作为唯一标识,建立三维哈希索引。
|
|
不管两个版本的表结构怎么变,系统都会**自动探查结构,然后通过三元组匹配准确提取数据**。未匹配到的数据会静默留空并记录日志,不会中断整个流程。
|
|
### (二)数据读取速度提升两个数量级
|
|
之前逐单元格读取数据特别慢,大一点的预算表要等好几分钟。其实根本不是电脑性能不够,而是**频繁的随机I/O操作拖了后腿**。
|
|
现在改成了**流式读取模式**:**一次性把整个表加载到内存,然后顺序扫描一遍生成字典**,之后所有取数操作都在内存中完成。现在处理最大的预算表也只需要几秒钟,实现了即时响应。
|
|
**性能优化的关键往往不在算法有多复杂,而在减少不必要的IO操作。顺序遍历永远比随机寻址快得多。**
|
|
### (三)自动生成"预算未达成"预警清单
|
|
之前报表只负责把数据填对,现在**增加了自动诊断功能**。报表生成后会自动对比每个项目的实际金额和预算金额,**计算完成率,把所有未达标的项目整理成清单,直接显示在报表最顶部的提示区**。
|
|
财务人员打开报表第一眼就能看到问题项目,不用再自己逐个筛选对比。
|
|
**自动化不能只满足于完成基础工作,还要能主动发现问题、提示风险,这样才能真正提升业务决策效率。** |