一、「有人在吗?excel打不开,报错」
眼看就要下班了,需求方妹纸竟然说用后台导出的excel打不开?惊出一身冷汗。
——「发过来,我看能重现卜」
——[已成功接收到文件xxx0214.xls]
——「我这打开也报错了,我看看吧……」
二、「这谁写的代码?」
一翻记录,都2年多前离职同事留下的世界遗产了,每次都是边骂边看,算,还是自己看着办吧……
打不开,报错,而且这报错信息,一点用都没看出来。
导了另外一天的数据,打开,正常。这时反应过来了,应该是「这天」的数据有问题。
随手就往打开好的ide里一扔,火眼金睛看了半天,找到了「问题」所在。
嗯,就你不一样,这还不抓个现行。总之满满的都是<Data ss:Type="String">111111</Data>
,是你的锅了。那么,改成String
看看。
打开了,破案!
三、「行了,发你一份能打开的了,你再试试」
打发完需求方,回头理下。
按感觉又改了改,发现这样也行。不太明白,是不是xml里还有格式的对应限制的?(提问:老司机们,xml的number类型,有长度限制吗?大小是多少?)
这个暂时放一放,去找源头,毕竟php输出的……
好吧,网上这么多 「php生成Excel文件」 的方法,非选了这么个麻烦货……(按我之前自己的做法,是直接用\t
,\n
输出一个.csv
文件就可以了阿)
好了,这个就暂时先不深究了。
四、总结
最后还是觉得没弄清楚,就去XML的教程上看了一遍。
可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
——百度百科:XML
XML 元素是可扩展,以携带更多的信息。
XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展。
——XML教程
突然意识到:XML的元素,只是一个标志符和里面的数值,并不会对「标志符」是什么,进而对「数值」做限制的。那么我前面的疑问「xml的number类型,有长度限制吗?大小是多少?」应该就不是XML的问题,问题应该在excel上:因为XML的标签和数值给的是number
和一个超长的数字值
,但excel读取时,就「傻傻」的按它自己的number标准去读取了,然后发现数据超出,异常,于是就报错了!(excel:怪我咯?……)
好吧,到这,才是真正破案了……
五、又收获一个linux语句
为什么用「又」?
截取的文件可以用重定向输入到新的文件中:
head -100 filename >a.txt
现用现查,轻松简单,快记下来(从图上还看得出熟练使用了二分法……为了找到上面那行异常的<number>
,鬼知道我经历了什么)
还有tail
,sed
,各种好东西,要多消化吸收。
六、参考文档
- PHP生成Excel (没懂到底为什么要用这种方法)
- php生成excel文件的简单方法 (生成csv)
- linux文件截取前几行,后几行,中间几行命令
- xml 数据类型方法的使用准则(基本也没什么用,不过是官方的说明)
- XML教程 - XML元素(很详细的基础教程)
(完)
分类:「 blog 」
发表时间:2017-02-14 17:39:01
最后更新:2017-02-23 20:33:36
转载请注明原作者及出处:「 biubiu - http://bluebiu.com/blog/excel-export-error.html 」