Answers:
现代Excel使用的xlsx
格式实际上是压缩格式。这是一个ZIP存档,其中包含具有特定结构的文本(XML)文件。
如果使用类似的ZIP压缩工具压缩纯文本文件,则应该获得类似的文件大小。
此外,正如布拉德利·乌夫纳(Bradley Uffner)和摩根(Morgen)在评论中所提到的,Excel将对相同的字符串进行重复数据删除,并仅存储它们的一个副本。我不确定这种方法的确切收益,它取决于您的数据集,但是简单的zip压缩可能会带给您大部分帮助。1个
9.1.3物理包装
每个Office Open XML文档都实现为ZIP存档。
1我的猜测是,当您有多个工作表时,这种重复数据删除最有效,因为zip压缩独立地应用于存档中的每个文件,并且一次仅应用于数据的有限部分-通过将所有字符串一起存储在单个文件中,应该为以后的压缩带来一些好处。实际上,如果您的纯文本格式仍在单个文件中,则可能几乎没有区别。
.zip
)。也可以使用该规范,但可以使阅读更加干燥。
给出的答案是正确的,这是由于Excel将您的数据存储为xml。也正是由于这个原因,有效地对数据进行排序也会减少文件的大小。自己测试-说您有类似的数据
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
如果仅按C(具有所有或几乎所有唯一值的列)排序,则B的相同值将不相邻。在Excel的xml中,它看起来像这样:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
如果按B(具有共同值的列)排序,则相同的值相邻。在Excel的xml中,它看起来像这样:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
由于该长字符串是相同且相邻的,因此Excel知道它可以将它们打包在一起,就像人们编写列表时一样,并且要重复上述行的一部分,他们使用引号而不是重新编写相同的内容。在调查中,我没有发现共享字符串字典的任何证据-只是此缩进代替了重复的字段值。
我仅在11个州寄出了250,000个客户的邮件列表,每条记录上都有一个字段,该字段是标识他们获得的报价的两个字符串之一。由于某些原因,我们的员工习惯于按口头地址查找人们,因此我们先按要约求助,然后说出:邮政编码,城市,街道名称,街道编号,最后是地址行2,文件大小显着减小。我检查了文件的解压缩xml,以各种方式对其进行了排序,以查看发生了什么,以上就是我得出的结论。如果有多个字段的字符数超过5个,但值是有限的(例如,票证配置为“已解决”,“已拒绝”,“已批准”等),
如果您有3.14159265359之类的数字,则需要13个字节才能将其存储在文本文件中;如果将此数字存储为浮点数,则仅需要4个字节。
xls
(BIFF)可能就是这种情况,但我认为并非xlsx
如此。xlsx
将所有数据存储在XML文件中,该文件不执行数字二进制编码-它们将转换为文本字符串并存储为文本字符串。我仍在尝试查找规范的相关部分,但我的经验测试(即提取保存的文档)显示,该1.123
字符串实际上以5个字符串存储在XML中。
c
(单元格)显示单元格将数据存储在v
标签中,如ECMA-376-1:2016§18.3.1.96 v
(单元格值)中所定义,其中该元素的可能值由ST_Xstring简单类型(第22.9.2.19节)定义。—它们提供了一些示例,例如<v>28086.3541666667</v>
将数据清楚地存储为字符串。
xlsb
,强烈建议在大张纸上使用