memory - Excel 2007 工作簿名称大小限制是多少?为什么?

标签 memory excel vba

Excel 2007 中的工作簿名称的大小应该仅受内存限制,但事实似乎并非如此。最终,保存到某个名称的数组将变得足够大,当您尝试保存时,您会得到(解释):“此工作簿中的一个或多个公式大于 8192 个字符限制,请另存为二进制文件”。

好的,那么将其保存为二进制文件格式...但即使在这里,数组也可能变得足够大而无法保存文件。

什么给了?发生这种情况时,姓名是如何存储在 Excel 中的?这是安装的特殊情况吗?有办法解决吗?

使用下面的代码亲自尝试一下。它将完美运行并且名称将被正确填充,但是保存会给您带来一些令人讨厌的错误。 3351 个元素太多了,但 3350 个就可以保存了:

Public Sub TestNameLimits()
    Dim v As Variant
    ReDim v(1)

    Dim index As Integer

    For index = 1 To 3351
        ReDim Preserve v(index)
        v(index) = "AAAA"
    Next

    Call Application.Names.Add("NameLimit", v)

End Sub

最佳答案

名称集合是 Excel 的一项功能,已经存在很长时间了。 Excel 2003 中的公式长度限制为 1,024 (2^10),但 Excel 2007 中的公式长度限制已扩展到 8,192 (2^13)。

这两篇文章介绍了 Excel 2003 和 Excel 2007 的主要大小限制:

Excel 2003 specifications and limits

Excel 2007 specifications and limits

为了解决这个问题,我会看看 Excel.Worksheet.CustomProperties收藏。我相信 Worksheet.CustomProperties 项目大小仅受内存限制。您必须在您的系统上进行测试,可能还需要在不同版本的 Excel 中进行测试,但我认为您应该能够轻松保存超过 10,000,000 个字符。

但是,在使用 Worksheet.CustomProperties 集合时,您将负责自己将数组与字符串相互转换,这与 Names 集合不同,Names 集合可以自动将数组转换为字符串。

关于memory - Excel 2007 工作簿名称大小限制是多少?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644429/

相关文章:

c - C 中的动态内存分配 : why do I get an error?

c++ - 在 C++ 中获取类型的底层位的通用且可移植的方法是什么?

json - 使用新的 API v1.1 将推文搜索到 excel 中

excel - VBA Excel : Copy column with start position and destination position

c++ - 为什么 GNU ld 在内存中留下一个洞?

performance - 高效的服务器端自动完成

python - Openpyxl:我们发现一些内容有问题

mysql - Excel VBA连接Linux服务器上的MySQL

excel - Excel VBA 使用 Telegram bot api 发送图像

function - 数组被错误地称为子或函数