什么时候应该使用xlsm或xlsb格式?

从Excel 2007开始,Microsoft将经典的.xls格式分为几种格式(尤其是.xlsx.xlsm.xlsb )。 我没有理解.xlsx格式的用途和用途,但是我仍然想知道在创build包含某些VBA的文件时是否应该使用.xlsm.xlsb格式。

当然,你可以在网上find一些主题,例如:

  • 在微软回答论坛
  • 在上一个链接指向的微软博客 (但我已经parsing,直到第10页,没有find一个参考.xlsb
  • 这个话题来自另一个论坛

我从最后一个链接中了解到, .xlsm是某种XML格式,因此需要自定义function区选项卡。

除了格式之间的概念区别( .xlsm基于XML VS .xlsb是一个二进制文件),使用这个文件(除了function区定制)之外,是否有任何实际的区别?
使用这些格式时,你有没有看到过任何真正的区别?

它们都是类似的,它们本质上是包含实际文件组件的zip文件。 只需用.zipreplace扩展名并将其打开即可看到内容。 与xlsb的区别似乎是组件不是基于XML的,而是二进制格式的:据说在处理大文件时这是有利的。 http://blogs.msdn.com/b/dmahugh/archive/2006/08/22/712835.aspx

.xlsx.xlsb长4倍,节省2倍,文件大1.5倍。 我在一个生成的工作表上testing了这个:10'000行* 1'000列= 10'000'000(10 ^ 7)单元格的简单链式=…+1公式:

 ╭──────────────╥────────┬────────╮ │ ║ .xlsx │ .xlsb │ ╞══════════════╬════════╪════════╡ │ loading time ║ 165s │ 43s │ ├──────────────╫────────┼────────┤ │ saving time ║ 115s │ 61s │ ├──────────────╫────────┼────────┤ │ file size ║ 91 MB │ 65 MB │ ╰──────────────╨────────┴────────╯ 

(硬件:Core2Duo 2.3 GHz,4 GB RAM,5.400 rpm SATA II HD; Windows 7,其他进程负载较重)

除此之外,应该没有区别。 更确切地说,

两种格式都支持完全相同的function集

从2006-08-29引用此博客文章 (不幸的是,引用的博客文章已被删除)。 所以也许信息.xlsb不支持function区代码比上面的引文更新,但我认为你的论坛来源是错误的。 当破解打开二进制文件,它似乎浓缩模仿OOXML文件结构1对1: 博客文章从2006-08-07

人们可以认为xlsb只比xlsm有优势。 xlsm基于XML和xlsb是二进制的事实是,当工作簿损坏发生时,您有更好的机会修复xlsm而不是xlsb。

XLSB格式还专用于位于Excel启动文件夹(XLSTART)中的隐藏工作簿文件中embedded的macros。

使用XLSTART文件夹中的xlsm或xlsb进行快速肮脏的testing:

 Measure-Command { $x = New-Object -com Excel.Application ;$x.Visible = $True ; $x.Quit() } 

0,89s与xlsb(二进制)与1,3s与xlsm格式相同的内容(xml在一个zip文件)… 🙂

仅仅为了后人,下面是关于Excel文件格式的几个外部来源的文本。 这些问题的其他答案中已经提到了其中的一些,但是没有复制必要的内容。

1.来自Doug Mahugh,2006年8月22日

新的XLSB二进制格式 像Open XML一样,它是一种完全保真的文件格式,可以存储任何可以在Excel中创build的文件格式,但是XLSB格式是针对性能进行了优化的,而纯XML格式不可能。

XLSB格式(有时也称为BIFF12,如“Office 12的二进制文件格式”)使用Open XML格式和XPS使用的相同开放包装惯例。 所以它基本上是一个ZIP容器,你可以用任何ZIP工具打开它,看看里面有什么。 但是,在包中的.XML部分,而不是.BIN部分…

这篇文章还提到了有关BIN格式的文档 ,在这里重现太冗长了。

2.从MSDN档案2006年8月29日,这反过来引用一个已经失踪的博客文章关于XLSB格式:

尽pipe我们已经做了很多工作来确保我们的XML格式能够快速高效地打开,但这种二进制格式对于Excel打开和保存仍然更有效率,并且可以为包含大量数据,或者在Open进程中需要大量的XMLparsing。 (事实上​​,我们发现在很多情况下,新的二进制格式比旧的XLS格式更快)。此外,这个文件格式没有macros – 所有的XLSB文件都可以包含macros(VBA和XLM) 。 在所有其他方面,它在function上等同于上面的XML文件格式:

文件大小 – 这两种格式的文件大小大致相同,因为两种格式都使用zip压缩保存到磁盘架构 – 两种格式都使用相同的打包结构,并且都具有相同的部分级结构。 function支持 – 这两种格式都支持完全相同的function集运行时性能 – 一旦加载到内存中,文件格式对应用程序/计算速度没有影响转换器 – 两种格式都将具有相同的转换器支持

出于某种原因,在.xlsm上使用.xlsb解决了用户定义函数在对象模型中创build幻像对象时遇到的一些问题: https : //superuser.com/questions/1005482/excel-creates-non-existent-worksheets -in-VBA项目资源pipe理器/ 1215336#1215336