在Excel工作簿中保存自定义数据

在Excel工作簿中保存自定义数据,excel,excel-2007,Excel,Excel 2007,是否可以在Excel工作簿中保存大量数据(约1-2MB) 理想情况下,此数据应与工作簿中的工作表绑定。 CustomProperties不太可能支持大数据 我的数据可以以下列形式表示:二进制、xml、字符串 谢谢…是的,您可以在Excel单元格中存储字符串和XML。对于二进制文件,最好不要将其保存在Excel中,但如果必须这样做,OLE(对象链接和嵌入)就可以了 这是一种选择。您可以将二进制文件保存为Excel外部的文件,然后将其作为OLE对象插入: Dim mySht As Worksheet

是否可以在Excel工作簿中保存大量数据(约1-2MB)

理想情况下,此数据应与工作簿中的工作表绑定。
CustomProperties不太可能支持大数据

我的数据可以以下列形式表示:二进制、xml、字符串


谢谢…

是的,您可以在Excel单元格中存储字符串和XML。对于二进制文件,最好不要将其保存在Excel中,但如果必须这样做,OLE(对象链接和嵌入)就可以了 这是一种选择。您可以将二进制文件保存为Excel外部的文件,然后将其作为OLE对象插入:

Dim mySht As Worksheet
Dim oleFileName as String

oleFile = "MyXmlDoc.xml" 

Set mySht = ActiveWorkbook.ActiveSheet

mySht.Shapes.AddOLEObject Filename:=Environ$("Appdata") & _
     "\MyFolder\" & oleFile, _
         Link:=False, DisplayAsIcon:=True
对于某些类型的通用文件类型,它工作得很好。但我们从未对原始二进制数据进行过处理。通常我们在电子表格中放入Word文档或PDF。您还可能面临损坏工作簿或丢失二进制数据的风险。在我们的例子中,OLE对象将被使用Wordperfect而不是Word的用户单击,或者他们运行Linux/Mac,嵌入的文档将无法打开


它确实会使Excel文件在添加每个嵌入对象时变得相当大。这是一项老技术,有其独特之处。

您可以在工作簿中为数据添加VBA模块,并用普通ASCII字符串对数据进行编码(例如,使用Base64编码)。生成的代码如下所示:

Dim x(1000) As String
Sub InitData()
    x(0) = "abcdefghijk...."
    x(1) = "123456789......"
    '...'


End Sub
如果愿意,也可以将这些字符串逐行存储在工作表中,而不是VBA模块中

要完成编码/解码,请查看以下内容:


如果您的信息以文件形式提供,您可以以二进制模式读取文件并将其放入单元格中。然后在最后或开始时保存文件名,以便轻松地重建文件。 以下是一些代码供您开始使用:

Sub readBin()
    Dim iFreeFile As Integer, bTemporary As Byte
    iFreeFile = FreeFile
    Open "\temp.bin" For Binary Access Read As iFreeFile
    Do While Not EOF(intFileNum)
        Get iFreeFile, , bTemporary //read byte from file
        Cells(1, 1) = bTemporary //save in cell
    Loop
    Close iFreeFile
End Sub 

Excel中的单元格支持井字、公式和数字。为什么要使用excel存储二进制数据?在Excel中使用它是非常困难的…很好的解决方案。值得一提的是,VBA编译器将在vb模块中存储数据限制为几千字节的数据,而在工作表中存储数据支持兆字节,没有问题。每个单元格存储的数据越多,将电子表格保存到磁盘所需的时间就越短。每个单元4 kb对我来说很好。Base64不会产生比十六进制更小的文件,而且实现起来更简单。我想这是由于工作表的压缩。