我试图从Excel中的某些单元格中删除特定的格式,但我有一个特殊的需要不使用.ClearFormats
,因为我需要保留其他格式。
例如,如果我之前使用过.Borders.LineStyle
属性,并且想要清除边框,我可以使用.Borders.LineStyle = xlNone
,它可以在视觉上移除边框。但是,此方法似乎会在文件大小中为单元格的格式化属性分配数据(不希望)。
我负责这个
Sub allBorders()
With ActiveSheet
dim rng as Range : set rng = .Range(.Cells(1,1), .Cells(5000,5000))
rng.Borders.xlLineStyle = xlContinuous
End With
End Sub
然后保存文件,我得到一个65 MB的文件。没关系
如果我随后使用rng.clearformats
清除格式并重新保存,文件大小将返回到预期的~ 16 kB。
但是,如果不是clearFormats,我这样做:
Sub clearAllBorders()
With ActiveSheet
dim rng as Range : set rng = .Range(.Cells(1,1), .Cells(5000,5000))
rng.Borders.xlLineStyle = xlNone
End With
End Sub
然后保存,文件大小保持在65 MB。
我只想删除特定格式并释放文件中分配的数据,如果这些单元格不存在其他格式。
更多信息,如果有兴趣为什么:我不想使用.clearFormats
,因为在我希望保留的范围内还有其他格式。我只希望删除特定的格式,如果任何单元格在范围内没有其他格式,然后有不必要的文件空间,没有格式,释放。
由于单元格的范围很大,我不想在对单个单元格使用clearFormats来获取释放的空间之前逐个属性和逐个单元格检查单个格式组合。(慢)
也不可能.clearFormats
和重新格式化所需的格式(非常复杂和缓慢)
以某种方式格式化单元格后,释放空间的唯一方法似乎是使用.clearFormats
是否存在需要设置的标志或单元格属性,或者由.clearFormats
设置,我可以直接操作以告知excel释放空间?
1条答案
按热度按时间vmjh9lq91#
您在尝试删除边框格式时,正在为使用和未使用的5000x5000单元格混合设置非默认格式。
Excel为具有非默认格式的“每个单元格”保存一个小信息。与单元格的内容相比,这种小格式信息(OfficeOpenXML格式规范所需的)可能占用更多的空间。
相反,尝试仅删除UsedRange中的边框。或者,尝试重置UsedRange。或者在完成格式化后删除尾随的空行和列,这将在保存文件时重置UsedRange。
您可以通过在工作表中按CTRL+END来检查Excel认为使用的LastCell。这通常是UsedRange的边界。