文档库 最新最全的文档下载
当前位置:文档库 › EXCEL不同的单元格格式太多 发现无法读取的单元格格式 等问题分析及解决思路

EXCEL不同的单元格格式太多 发现无法读取的单元格格式 等问题分析及解决思路

在使用excel过程中,很悲剧的会出现“不同单元格式太多”的提示,或者编辑完的文档在下次打开时提示“发现无法读取的内容……”提示修复但是修复后之前的文档格式全部不见了。

对于以上两种悲剧的情况,网上有很多解决办法,但是试过都不太给力。

曾经也是因此悲剧了很多次,同事出现这个问题的时候也帮不上什么忙,于是潜心研究一下这个问题的根本原因;

首先说下对于“不同单元格式太多”的解决方案:

1.在excel文档中按 alt+f11 快捷键打开VBA编辑器

随便打开左侧列表中的一个,会出现VBA代码编辑界面,复制下列代码进入。

Sub DelStyls()
Dim s As Style
Application.ScreenUpdating = False
For Each s In ThisWorkbook.Styles
If Not s.BuiltIn Then s.Delete
Next
Application.ScreenUpdating = True
End Sub

Sub X()
Dim s As Style
Dim e
For Each s In ActiveWorkbook.Styles
'MsgBox https://www.wendangku.net/doc/f31508834.html,
On Error Resume Next
If Len(https://www.wendangku.net/doc/f31508834.html,) > 0 And https://www.wendangku.net/doc/f31508834.html, <> "Normal" Then
s.Delete
End If
If Err.Number > 0 Then
e = "Error occour on deleting Style named " & https://www.wendangku.net/doc/f31508834.html,
e = e & vbCrLf & "Err:" & Err.Number & "->" & Err.Description
MsgBox e
Err.Clear
End If
Next
End Sub



复制过不用保存,转到excel文档界面,在最左上角会有“查看宏”按钮,如果没有就在excel选项-->自定义-->常用命令 里面找到查看宏命令添加即可。

打开宏查看器后会看到两个宏,一个叫DelStyls 一个叫X,通常情况下双击DelStyls运行即可,但是这个宏运行的很慢要等很长时间。

以上这个就是网络上大神提供的代码,实验过十分有效。



2等下再说。



至于保存文档后打开时提示 有无法读取的内容 时,如果文档格式不是很重要就直接让excel自己修复好了,一般数据不会丢失只是格式全没了。

这种情况网上提供较多的方法,但是不一定都有用,我试过的基本都没有帮助- -。

对此下面提供一个比较蛋疼的处理方法。

将文档的后缀名改为.zip 即压缩包格式

双击改名后的文件,解压软件会显示一个目录结构出来。

在里面找到 xl 这个文件夹,双击进入

打开 styles.xml 这个文件,注意如果是编程人员直接双击打开应该是编辑器中,否则要右键用记事本打开,总之比用ie等浏览器打开就行,因为要编辑的。

打开可能会很慢,应为那是一个巨大的字符串,电脑处理起来很慢。

打开后如果看着不爽或者编辑器实在太满了,那么就整理一下格式。

替换 为 换行+制表符 +

替换为 换行+制表符 +

替换为 换行+

制表符 +

替换
替换
替换之后文档处理起来会快很多 ,同时看着也舒服很多。
接下来说明一下xml标签的大概意思:
font: 字体信息 ,在 ..... 标签之间
fill :表格填充信息,在 ..... 标签之间
border:边框信息,在 ..... 标签之间
xf :单元格样式信息,
标签之间的是单元格格式的定义,以上所说的样式过多就是这里的问题
标签之间的是具体单元格的样式,不要动这里的东西,出现无法读取样式的提示就是这里出问题
cellStyle:单元格样式,在 之间,猜测可能是excel里面显示的样式的,
这里的数量与 的数量要一致,样式过多的问题同样也是这里的问题。

基本有用的就是这几个东西。
一.处理单元格样式过多的问题时,直接将 标签之间与 标签之间的内容全都删除,只留一条,同事修改count为1;
修改后样式如下:









注意里面的值最好全都用0,修改后保存,压缩软件会提示重新进行压缩,同意即可。
之后将文件名后缀改回为xlsx/xls即可。用excle打开看看效果。
二.出现无法读取数据内容的问题
这个问题比较麻烦,有时候可以直接按照上面的方法吧所有的样式信息干掉就好了。
但是有时候不会,造成错误的原因是:



这个标签中的 xf 即具体单元格样式在引用上述定义的样式时索引超出定义范围;

numFmtId 一般不用管他,不会在这出错
fontId 他的值范围为 0 --- 中count的值,如果超出则会提示有无法读取的内容
fillId 他的值范围为 0 --- 中count的值,如果超出则会提示有无法读取的内容
borderId 他的值范围为 0 --- 中count的值,如果超出则会提示有无法读取的内容
xfId 进过测试貌似这个值是多少都不会出错。
逐一检查 中所有标签中各个值的引用范围是不是越界,如果越界则那条出错,可以改变各个值使其在允许的

范围内,也可以增加上面的样式定义数量。
之后再检查

这个标签中的 xfid 是不是在 0 ---- 中的count范围内,不在的就会出错,解决方法就是把这个值改到正常范围。

最后可以将没有引用到的样式直接删除。 内的东西就是样式,没用的就可以删了。

这样操作会有一些风险性,操作前先做好备份。

写完了。空间的编辑器真心不好用,格式乱的1b啊。
以前觉得excel很是强大,不够它也为用户做了很多没有必要的事情,比如复制内容时就会把大量的单元格样式复制过去,而且这些都没什么用。把那些样式都删了 可以减少大概7M的大小。

以下是一个刚刚创建的空的excel中style.xml的内容:








>

















这个东西只看了几个小时,说的不对的地方不要见笑,还望高人指点。这么做也是被excel逼的啊。。。。。。。。。。。。。。。。