【问题标题】:Save custom data in Excel workbook在 Excel 工作簿中保存自定义数据
【发布时间】:2011-05-12 17:03:33
【问题描述】:

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

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

我的数据可以以以下形式呈现:二进制、xml、字符串。

谢谢...

【问题讨论】:

  • Excel 中的单元格支持很好的文本、公式和数字。为什么要用excel来存储二进制数据?在 Excel 中使用它会非常困难......

标签: excel excel-2007


【解决方案1】:

是的,您可以在 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 文件随着您添加的每个嵌入对象而变得相当大。这是一项有其怪癖的古老技术。

【讨论】:

    【解决方案2】:

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

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

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

    要完成编码/解码,看这里:

    How do I base64 encode a string efficiently using Excel VBA?

    Base64 Encode String in VBScript

    http://www.source-code.biz/snippets/vbasic/12.htm

    【讨论】:

    • 不错的解决方案。值得一提的是,在 vb 模块中存储数据被 VBA 编译器限制为几千字节的数据,而存储到工作表则支持兆字节,没有问题。每个单元格存储的数据越多,将电子表格保存到磁盘所需的时间就越少。每个单元 4 kb 对我来说很好。 Base64 不会产生比十六进制更小的文件,并且更易于实现。我想这是由于工作表的压缩。
    【解决方案3】:

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

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多