办公软件
LibreOffice 表格求和总错位,我把分隔符挨个试了一遍才找到病根
104 0 16
先说结论:如果你从别处复制过来的数字,用 LibreOffice Calc 求和结果老是差一截、或者干脆算出 0,八成不是公式写错了,是数值被当成了文本,而罪魁祸首往往是那个看不见的分隔符。
这坑我栽过。上周做季度行政费用汇总,从三个来源拼表:一个是别人发的 CSV、一个是从网页表格里粘的、还有一个是从 PDF 里抠出来的。粘完看着挺整齐,一千多行,我拉了个 SUM 上去,结果比手工抽验少了小两万。
我当时第一反应是公式范围选错了,来回核了三遍,范围没错。又怀疑有隐藏行,取消隐藏、检查筛选,也没有。
后来才想起来用「值高亮」那套思路——在 Calc 里选中那一列,看状态栏的「求和」和「计数」。如果计数(COUNTA)明显大于求和能算进去的个数,就说明有一批格子是文本。
问题就出在那些格子里的字符上:
- 从网页粘的那批,数字里混了不间断空格(U+00A0),肉眼和普通空格一模一样,但 Calc 不认它是千分位,直接当文本。
- 从 PDF 抠的那批,负号是全角减号,不是半角。
- 从 CSV 来的那批,有几百行末尾带了不可见的制表符。
三种分隔符/空白字符,三种不同的病,表现却都是「求和不对」。
我的处理顺序,供参考:
- 第一步,先用
=ISNUMBER(A2)拉一列辅助判断,TRUE 才是真数值,比眼睛看靠谱。 - 第二步,批量清洗:选中区域 → 查找替换,正则模式打开,把 \u00A0、全角减号、制表符依次替换成普通字符。Calc 的查找替换支持正则,这点比很多人以为的强。
- 第三步,替换完还是文本的话,用「数据 → 分列」或者直接
=VALUE()转一遍。 - 第四步,重新 SUM,对上了。
我的判断依据是: Calc 对文本型数字非常宽容地「看起来像数字」,但求和时会静默跳过,不会报错。这点和 Excel 的绿三角提示不一样,容易被忽略。所以我现在的习惯是,凡是外来数据进表,先跑一遍 ISNUMBER 抽检,再动手算。
顺便说一句,我坚持用 LibreOffice 就是因为干净,没弹窗没广告,这种批量替换和正则查找的功能还给得挺全。至于那个替换后偶尔冒出来的「是否保留格式」提示,我是直接选纯文本粘贴,省得它又给我带一层 HTML 格式过来。
想问问各位:你们从网页或 PDF 往表格里搬数据的时候,有没有遇到过更刁钻的隐藏字符?我现在只摸清了空格、全角符号和制表符这三类,还有没有别的坑等着我?
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
