何时应该使用xlsm或xlsb格式?

112
自Excel 2007以来,Microsoft已将经典的.xls格式拆分为几种格式(特别是.xlsx.xlsm.xlsb)。我没有问题理解.xlsx格式的用途和目的,但我仍然想知道在创建包含一些VBA的文件时,我们应该使用.xlsm还是.xlsb格式。
当然,你可以在网上找到一些主题,例如:
- 在Microsoft答案论坛上 - 在前面链接中提到的Microsoft博客上(但我已经解析了10页,没有找到有关.xlsb的参考) - 来自另一个论坛的这个主题 从最后一个链接中我所理解的是,.xlsm是某种XML格式,因此需要用于自定义功能区选项卡。

除了格式上的概念差异(.xlsm 基于 XML,而 .xlsb 是二进制文件),在使用这些文件时是否有任何实际差别(除了功能区自定义)?
您是否曾经在使用这些格式时看到过任何真正的差异?


4
xlsb通常比xlsm文件更小。 - Charles Williams
一些有用的信息在这里-https://analystcave.com/excel-working-with-large-excel-files-the-xlsb-format/ - Chris
2
由于某些原因,使用.xlsb而不是.xlsm解决了我们在用户定义函数中创建幻象对象的一些问题:https://superuser.com/questions/1005482/excel-creates-non-existent-worksheets-in-vba-project-explorer/1215336#1215336 - SuMau
5个回答

96

.xlsx加载时间比.xlsb长4倍,保存时间长2倍,文件大小大1.5倍。我在一个生成的工作表上进行了测试,该工作表具有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 │
╰──────────────╨────────┴────────╯

(Hardware: Core2Duo 2.3 GHz, 4 GB RAM, 5.400 rpm SATA II HD; Windows 7, 在其他进程的重负载下。)
除此之外,两种格式没有任何区别。更确切地说,
两种格式支持完全相同的功能集
引用自这篇博客post,日期为2006年8月29日。因此,也许.xlsb不支持Ribbon代码的信息比上述引文更新,但我认为你那个论坛的消息来源是错误的。当打开二进制文件时,它似乎紧凑地模仿了OOXML文件结构1对1:博客article,日期为2006年8月7日

2
只有一次尝试,但没有ministat(1)的结果:-\ - Good Person
2
我确认我的一个带有自定义功能区的文件在xlsb中可以正常工作。 - David G
6
".xlsx"类似于".xlsm",只是禁用了宏。两者都基于XML。与此相反,".xlsb"是二进制的。因此,您应该将问题理解为"{.xlsx / .xlsm} versus .xlsb"(即".xlsx/.xlsm"与".xlsb"之间的区别)。(没有禁用宏的二进制".xlsb"版本。) - Aaron Thoma
4
如果xlsb更好,为什么xlsx是默认选项?xlsb一定存在一些劣势吗? - PProteus
3
@PProteus,简单来说,xlsb在某些特定领域更优秀。引入XML标准的整个理念是为了更透明,使文件更易移植且文件操作更加容易。现在第三方工具可以正确读写Excel文件(我知道,他们以前也能通过某些反向工程实现,但那种方式容易出错)。另一方面,使用大型Excel文件并不是Excel的主要用途,因此在可移植性方面做出的妥协很小。此外,使用非宏文件在一定程度上增加了安全性。举例来说,如果汇编语言更好,为什么还要费心学Java呢? - Ister
显示剩余2条评论

62

1
.xls文件的格式是二进制的。.xlsb文件保留了这种二进制格式,适用于较新版本的Office。以二进制格式存储数据既可以减小文件大小,也可以提高速度,尽管这些改进只会在非常大的文件中才能体现出来。 - music2myear

11

有人可能会认为xlsb在xlsm上只有优势。实际上,由于xlsm是基于XML的,而xlsb是二进制的,因此当工作簿损坏时,你更有可能修复xlsm而不是xlsb。


1
如果是真的,那么xlsm就是我需要的。自从90年代中后期以来,我一直被损坏的Excel文件所困扰。这几乎足以让我开始挖沟做生意了。Office 2000是第一个具有文件恢复功能的版本。但我不得不承认,它并没有完全解决我的问题。 - riderBill
XLSX和XLSM文件扩展名比2007年之前的Excel XLS文件扩展名稳定得多。 - Felipe Costa Gualberto
为什么会有这么多点赞?有任何实际证据吗?“神话:二进制工作簿更容易出现文件损坏” https://www.spreadsheet1.com/how-to-save-as-binary-excel-workbook.html - johny why

9

以下是关于Excel文件格式的几个外部来源的文本内容,仅供参考。其中一些已经在其他回答中提到,但没有再次重现基本内容。

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

...新的XLSB二进制格式。与Open XML一样,它是一个可以存储您在Excel中创建的任何内容的完全保真度文件格式,但XLSB格式针对性能进行了优化,这是纯XML格式无法实现的。

XLSB格式(有时也称为Office 12的BIFF12二进制文件格式)使用Open XML格式和XPS所使用的相同的开放式打包约定。因此,它基本上是一个ZIP容器,您可以使用任何ZIP工具打开它以查看其中的内容。但是,您将在包中找到.BIN部分,而不是.XML部分...

本文还提到了有关BIN格式的文档,过长,此处不予重复。

2. 来自MSDN存档,2006年8月29日,引用了有关XLSB格式的已经失踪的博客文章:

尽管我们已经进行了大量工作,以确保我们的XML格式快速高效地打开,但这种二进制格式仍然更有效,Excel打开和保存速度更快,并且可以为包含大量数据或在打开过程中需要大量XML解析的工作簿带来一些性能改进。 (实际上,我们发现新的二进制格式在许多情况下比旧的XLS格式更快)。 此外,没有不含宏的版本该文件格式 - 所有XLSB文件都可以包含宏(VBA和XLM)。 在所���其他方面,它在功能上与上述XML文件格式相同:

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


两种格式的文件大小大约相同 -- 这个信息已经过时了。xlsb 的尺寸比较小是常识。我刚刚保存了一个包含一百万条四个字段且没有宏的记录的25 MB xlsx 文件为 xlsm 和 xlsb 格式。xlsm 副本也是 25 MB。xlsb 副本只有 9.6 MB。 - johny why
@johnywhy 或许在15年间有所改进...或者它也可能对数据敏感? - StayOnTarget
1
我怀疑“相似大小”是基于具有大量内容、公式等的工作表,其中单元格相对较少,因此由于xml打开和关闭标记的开销受到限制。也许当您有很多单元格中只有少量数据时,就像@johny为什么那样,xml打开和关闭标记会产生更大的负担? - ProfDFrancis

6

XLSB格式也专门用于嵌入在位于Excel启动文件夹(XLSTART)中的隐藏工作簿文件中的宏。

在XLSTART文件夹中进行快速测试,使用xlsm或xlsb文件:

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

使用xlsb(二进制)格式的文件,处理相同的内容仅需0.89秒,而使用xlsm(zip文件中的XML)格式则需要1.3秒...:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接