如何将大(最大10Mb)文本文件embedded到Excel文件中

将大文本文件(最大10Mb)存储在Excel文件中的最佳方法是什么?

我有几个要求:

  1. 它必须embedded,以便Excel文件可以移动并发送到不同的计算机,所有的文本文件将遵循。

  2. 它需要从一个macros来完成。

  3. 一个macros需要能够在embedded后读取文件内容。

我已经试图通过将文本分成几个块来存储它,这个块足够小以适应一个单元格(大约32000个字符),但是它不起作用。 我的macros插入前15万个字符后,它给了我一个“内存不足”的错误。

我记得看到一个网页有几个选项,但我找不到它了。 任何build议是最受欢迎的。 如果你不确定它是否有效,我会试试。

非常简单的CustomXMLPart示例:

Sub CustomTextTester() Dim cxp1 As CustomXMLPart, cxp2 As CustomXMLPart Dim txt As String 'read file content txt = CreateObject("scripting.filesystemobject").opentextfile( _ "C:\_Stuff\test.txt").readall() 'Add a custom XML part with that content Set cxp1 = ThisWorkbook.CustomXMLParts.Add("<myXMLPart><content><![CDATA[" & txt _ & "]]></content></myXMLPart>") Debug.Print cxp1.SelectSingleNode("myXMLPart/content").FirstChild.NodeValue End Sub 

最好是简单地将.txt文件保存在Excel文件旁边,然后让macros从该文件夹中根据需要提取文本。 要了解更多有关导入文件的信息,请看:

http://answers.microsoft.com/en-us/office/forum/office_2010-customize/vba-code-to-import-multiple-text-files-from/525bd388-0f7d-4b4a-89f9-310c67227458

在Excel文件中保存.txt文件本身并不是必须的,从长远来看,传输文件可能会更困难。 例如,如果您无法通过电子邮件发送大于10MB的文件,则可以简单地将.txt文件分割成两半,然后分别使用一个将文本加载到Excel本地的电子邮件。

考虑下面显示的方法。 它使用位于工作表上的Label对象的Caption属性来存储数据。 所以你可以用不同的名字创build一些这样的容器。

 Sub Test() Dim sText ' create special hidden sheet for data storage If Not IsSheetExists("storage") Then With ThisWorkbook.Worksheets.Add() .Name = "storage" .Visible = xlVeryHidden End With End If ' create new OLE object TypeForms.Label type as container AddContainer "test_container_" ' read text from file sText = ReadTextFile("C:\Users\DELL\Desktop\tmp\tmp.txt", 0) ' put text into container PutContent "test_container_", sText ' retrieve text from container sText = GetContent("test_container_") ' show length MsgBox Len(sText) ' remove container RemoveContainer "test_container_" End Sub Function IsSheetExists(sSheetName) Dim oSheet For Each oSheet In ThisWorkbook.Sheets If oSheet.Name = sSheetName Then IsSheetExists = True Exit Function End If Next IsSheetExists = False End Function Sub AddContainer(sName) With ThisWorkbook.Sheets("storage").OLEObjects.Add(ClassType:="Forms.Label.1") .Visible = False .Name = sName End With End Sub Sub RemoveContainer(sName) ThisWorkbook.Sheets("storage").OLEObjects.Item(sName).Delete End Sub Sub PutContent(sName, sContent) ThisWorkbook.Sheets("storage").OLEObjects.Item(sName).Object.Caption = sContent End Sub Function GetContent(sName) GetContent = ThisWorkbook.Sheets("storage").OLEObjects.Item(sName).Object.Caption End Function Function ReadTextFile(sPath, iFormat) With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 1, False, iFormat) ReadTextFile = "" If Not .AtEndOfStream Then ReadTextFile = .ReadAll .Close End With End Function