【项目背景】
昆区一家工程公司的财务,上月做年度汇算,打开一个 68MB 的成本汇总表,Excel 弹窗「文件已损坏,无法打开」,点修复后数据只剩表头。这文件是三个人用共享盘来回改了两个月的成果,没有版本记录,也没有备份。财务总监找到我们时,U 盘里还带着一个「修复后」的副本,打开一看,公式全变成了值,透视表全没了。
很多人觉得 Excel 损坏就是文件坏了,找数据恢复公司按字节拼。但实际上 xlsx 是个 zip 容器,里面是 XML,绝大多数损坏只发生在个别 XML 部件或者共享字符串表,容器还在、数据还在,用不着开盘那么重的手段。
【咨询设计】
第一步不是修,是镜像。把原文件复制三份,只在副本上操作,源文件写保护。第二步改扩展名为 zip,用 7-Zip 打开,目录结构完整:xl/workbook.xml、xl/worksheets/sheet1.xml 到 sheet6.xml、xl/sharedStrings.xml、xl/styles.xml。解压时报 sharedStrings.xml 校验失败,大小 41MB,用文本编辑器打开,末尾 XML 在中途截断,说明写入时断电或者共享盘同步冲突。
处理路径分三层:先试 Excel 自带打开并修复,能救回结构和公式;不行就用 LibreOffice 转存,它对损坏容器的容忍度高;再不行手工重建 sharedStrings,把截断位置之前的字符串索引保留,缺失的索引用占位符补,然后逐个 sheet 校准单元格的 t="s" 引用。这次走到第二层就成功了八成,缺的 200 多行用第三层补齐。
【施工规划】
重建时注意三个坑:一是共享字符串索引是全局的,删一条后面的全错位,只能补不能删;二是日期在 xlsx 里是序列号,样式表丢了会变成 45000 这种数字,要按 numFmt 重新套;三是合并单元格的 mergeCells 节点在 sheet 末尾,截断时最容易丢,丢了以后表格错位但数据还在,得按行列范围重建。
整个过程在一台断网的虚拟机上做,装 Python 3.11 加 openpyxl 和 lxml,脚本先解析 workbook.xml 拿到 sheet 顺序和 rId 映射,再逐个 sheet 流式解析,避免 68MB 全量载入内存。每修好一个 sheet 就单独存一个 xlsx,最后用 Power Query 合并,比整本修稳。
【安全补丁】
修完文件,真正该补的是流程。这份表里有供应商报价、人工成本、投标下浮率,三个人的笔记本都能访问,共享盘没有版本控制,谁改的查不到。我们给共享盘开了卷影副本,每天 12 点和 18 点各一次,保留 30 天;Excel 加「始终创建备份副本」;文件放在带权限的目录,财务组可写、预算组只读;打开带宏的文件一律禁用宏并提示。另外查了那台机器的 U 盘使用记录,插过三台外来设备,其中一台有 autorun.inf,已经用离线杀毒清掉。
【验收交付】
最终交付一个可正常打开的 xlsx,六个 sheet 齐全,公式重算后与纸质报表核对,差异 0.03 元,来自原表四舍五入,可解释。透视表重建了两个,数据源指向修好的明细。做了三件事防止再犯:共享盘开卷影、Excel 自动备份间隔改 5 分钟、每月 1 号自动归档一份只读版本到 NAS。财务三个人现场学会用「文件-信息-版本历史」找回旧版。
【售后承诺】
数据救援按结果收费,修不出来不收钱,这是规矩。修好的文件我们保 30 天,期间发现新问题免费返工。平时表格打不开、乱码、公式错乱,先打 17704868686,别自己点「修复」把现场破坏掉。大年三十也接电话,数据这事等不起。
【不舍昼夜技术 · 包头IT全生命周期服务】
业务全闭环:咨询规划、方案设计、工程实施、竣工验收、维保售后。
咱能干的:包头修电脑/装监控/拉网线/做系统/救数据/办软件/卖耗材。
技术范畴:5G通信、大数据服务、信息系统集成、网络安全、商用密码、平面设计。
服务区域:昆区、青山区、九原区、东河区、高新区等包头全境,随叫随到。
技术热线:17704868686(本地专业团队,不舍昼夜为您守候!)