Excel 损坏诊断

把一列从表格软件里出来的数据粘进来。本工具会告诉你什么被改坏了 —— 以及更有用的那半句:是还能在这里修好,还是必须回源头重新导出。有些表格损坏是可逆的;有些直接毁掉数据,没有任何工具能把它换回来。

🔒 你的数据不会离开浏览器。

本地读取,绝不上传。

真正要紧的那个问题

多数工具会告诉你某个值看着不对。那是容易的一半。决定你这个下午怎么过的是另一半:原始数据是否还在文件里 —— 如果不在,花在修这份导出上的每一分钟都是白费,唯一的修法在上游。

8.71E+12 来说。它看起来能修:展开一下就得到 8710000000000。但这个记法描述的是一个 13 位的数字,而它只带着其中 3 位。另外 10 位不在这个文件里。那次展开是一次装扮成修复的猜测 —— 如果它是条码,你刚刚凭空造出了一件商品。对照 8.712345678901E+12,它带着全部 13 位,确实能如实展开成 8712345678901。本工具会数清位数,告诉你落在哪一档。

为什么丢掉的前导零只能靠上下文看出来

表格软件会去掉前导零,好让值表现得像数字。单看 45678901234,没有任何迹象说明少了一个零 —— 它就是个十一位数。可把它放回一列里、而同列其余数字单元格都是十二位时,就一目了然了。所以本工具从整列推断应有的位数宽度(至少要有三个等长单元格,它才肯下这个结论),然后才给出还原值。

15 位的天花板

表格软件最多保留 15 位有效数字,第十五位之后一律变成零。十六位的标识符 —— 某些卡号、长序列号、某些内部 SKU —— 会静默地掉尾巴。一个以零结尾的长值正好就是这个形状,但真实数字也可能如此,所以这里报的是特征而不是判决。

会运行程序的那个单元格

=+-@ 开头的单元格,在文件被打开时会被当作公式执行 —— 制表符、回车、换行,以及全角的 = + - @ 同样如此。这是安全问题而不是格式问题:它能把其他已打开表格的内容偷出去。它也是唯一一种通常还修得回来的损坏,因为文本其实一个字都没丢。

没法撤销的那一种

MAR1 这样的编码被读成日期,它就变成了 1-Mar,原文没了。这件事无法逆转,因为 MAR11MARMAR-1 都会得到同一个日期。本工具选择把候选列出来而不是替你挑一个 —— 那才是诚实的答案。最有名的案例是基因名,但任何「三个字母加数字」的 SKU 编法都躲不掉。

本工具执行的全部检查(11 条规则)

XL-S01科学计数法

一个长数字被转成了科学计数法。能不能修,取决于还剩几位有效数字:“8.71E+12” 描述的是一个十三位数,却只带着其中三位,另外十位已经没了,没有工具能把它们编出来。本工具会数清还剩多少位,并告诉你落在哪一档。

修复: 如果数位已经丢了,就从源头重新导出,并把该列设为文本格式 —— 修这一份拷贝是做不到的。

来源: Microsoft Support — Keeping leading zeros and large numbers

XL-S02第 15 位有效数字之后被舍入

表格最多保留 15 位有效数字,第十五位之后一律换成零。一个十六位及以上、且尾部全是零的值,正是这种损坏留下的形状 —— 但真实数字也可能恰好以零结尾,所以这里报的是「特征」,不是判决。

修复: 拿它和你的真相源核对。如果原值长于 15 位,尾部已经没了,这一列需要以文本格式重新导出。

来源: Microsoft Support — Keeping leading zeros and large numbers

XL-L01前导零被吃掉

表格会去掉前导零,好让值表现得像数字。这种损坏只能靠上下文发现:这个值恰好比同列其余值短一位 —— 而这正是丢了一个前导零的样子。

修复: 把该列设为文本格式重新导出。这里可以补回那个零,因为应有的位数从同列就能知道。

来源: Microsoft Support — Keeping leading zeros and large numbers

XL-D01编码被识别成了日期

一个长得像日期的商品编码被转成了日期。“MAR1” 变成 3 月 1 日,“SEPT2” 变成 9 月 2 日。现实里最有名的案例是基因名,但任何「三个字母加数字」的 SKU 编法都会中招。原文无法确定地还原,因为好几个编码会映射到同一个日期。

修复: 把该列设为文本格式重新导出。这里列出的候选是「可能性」,不是答案。

来源: Derived from the documented behaviour of spreadsheet number handling and from the shape the damage leaves behind in exported files. Each signature is matched against its own regression fixtures rather than assumed.

XL-F01浮点尾巴

小数末尾一长串零或九,是二进制浮点运算留下的残渣 —— 0.1 + 0.2 会算出 0.30000000000000004 是出了名的。真正要的几乎总是四舍五入后的那个值,但原始字符串与它比不相等。

修复: 按这个字段实际需要的精度取整,金额通常是两位小数。

来源: Derived from the documented behaviour of spreadsheet number handling and from the shape the damage leaves behind in exported files. Each signature is matched against its own regression fixtures rather than assumed.

XL-C01公式注入风险

以 =、+、-、@、制表符、回车或换行开头的单元格,在表格软件里打开时会被当作公式执行 —— 某些区域设置下,全角的 = + - @ 同样如此。这是安全问题,不是格式问题:它可以被用来窃取已打开表格的内容,或攻击打开这个文件的人。

修复: 在带引号的字段内部给单元格加一个制表符前缀,或者去掉开头那个字符。注意:基于引号的转义在表格软件重新保存文件时会被抹掉。

来源: OWASP — CSV Injection

XL-E01表格错误值

#N/A 或 #REF! 这类错误值被当作纯文本导出了。上游某处的公式失败了,而失败本身被当成数据发了出来。

修复: 回源头修那个公式;这里没有任何值可以恢复。

来源: Derived from the documented behaviour of spreadsheet number handling and from the shape the damage leaves behind in exported files. Each signature is matched against its own regression fixtures rather than assumed.

XL-T01显示格式被写进了值里

货币符号、千位分隔符、百分号,或者会计格式里表示负数的括号,都是「显示格式」,现在它们被写进数据本身了。Feed 与 API 要的是裸数字。

修复: 去掉这些格式。注意会计格式下括号表示负数 ——(1,234.00)是 -1234.00,不是 1234.00。

来源: Derived from the documented behaviour of spreadsheet number handling and from the shape the damage leaves behind in exported files. Each signature is matched against its own regression fixtures rather than assumed.

XL-T02被强制转成了布尔值

某个值变成了 TRUE 或 FALSE。商品数据里真的该读作 “true” 的情况很少见;更常见的是一个编码、一个标记列,或者一个两字母的国家代码被当成了布尔值。

修复: 检查源列。如果原本是编码,以文本格式重新导出。

来源: Derived from the documented behaviour of spreadsheet number handling and from the shape the damage leaves behind in exported files. Each signature is matched against its own regression fixtures rather than assumed.

XL-W01不可见空白或不换行空格

值里带着不换行空格、零宽字符,或首尾多余的空白。它们能扛过复制粘贴,会让精确匹配失败,而且在任何预览里都看不见。

修复: 去掉首尾空白,并把不换行空格换成普通空格。

来源: Derived from the documented behaviour of spreadsheet number handling and from the shape the damage leaves behind in exported files. Each signature is matched against its own regression fixtures rather than assumed.

XL-N01未检出损坏

这个值上没有出现任何已知的表格损坏特征。

来源: Derived from the documented behaviour of spreadsheet number handling and from the shape the damage leaves behind in exported files. Each signature is matched against its own regression fixtures rather than assumed.

精度与前导零的行为依据 Microsoft Support — Keeping leading zeros and large numbers; 公式注入这一条依据 OWASP — CSV Injection. 其余的特征是从损坏在导出文件里留下的形状推出来的,每一条都有自己的回归用例在盯着。

关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →