今天用onedrive+word的时候连续两次出现了这个bug,差点害得我错过deadline。经排查后发现都和word的math有关,所以写下这个心得供日后使用。
错误:
- word文档 .docx
- the file _____ cannot be opened because there are problems with the contents. unspecified error Location /xxx/yyy.xml, Line:OO, Colume:??
所需工具:
- winrar/bandizip
- sublime+xml indent(用于重新排版xml)+exalt(用validator确保开头结尾成对)
时间:~30分钟
步骤(二分法):
- 用winrar/bandizip打开word文档
- 用sublime打开出错的xml文件,比如/word/document.xml
- 把xml内的东西先复制到一个temp文件中备份
- 用xml indent排版xml
- 用exalt validator确保没有对齐的错误
- 从edit->code folding把代码折叠至level3
- 用二分的方式定位出错的语句(~100行范围内)(omath的出错可能性更大)
- 删除<body></body>里面的一半行的xml代码(成对的<??></??>删)
- 保存
- 点一下winrar/bandizip更新.xml文件
- 用word打开.docx
- 如果成功打开,那么bug就在删除的部分,如果仍然不能打开,那么bug就在剩下的部分
- 重复7.1-7.6
- 定位到bug后寻找关键词(如:xxxxId:"_______",引号里的id一般都是唯一的)用于删除
- 根据bug位置的上下文分析带bug处的原来的语句用来还原
- 将temp里的备份重新复制到document.xml里,并根据关键词___删除带bug的行(记得要成对删)
- 保存,退出zip,用word打开文件
- 重新输入删除的部分
如何避免:
- 经常性的手动留个本地备份
- 改用latex
- 不要把文档放在U盘/one drive上编辑,避免连接断开时出现错误