将我的集合和对象写入磁盘并在以后重新导入它们的最佳策略是什么?

时间:2011-03-08 16:43:05

标签: vba excel-vba excel

我设置了许多集合和对象,这些集合和对象具有四层深度的一对多关系。 CollectionA包含许多CollectionB个对象,CollectionB包含多个CollectionC个对象,CollectionC包含多个Content个对象。

在用户花费时间用所需数据填充所有这些集合和对象之后,他们需要能够保存每个对象的所有属性,然后读取输出文件并从它们停止的位置开始。

我知道这是一个有点广泛的问题,所以我希望看到我应该在研究方向上采用哪个方向来解决这个问题。现在我最关心的是文件I / O,我正在考虑两种不同的路径。

这是一个excel项目,所以我想我可以从上到下遍历所有集合和对象,并将它们的值写入电子表格,然后遍历电子表格行并将其输出到分隔的文本文件。然后反过来读取文本文件 - 从文本到电子表格,然后从电子表格到集合和对象。

也许另一种选择是绕过电子表格并使用TextStream?如果我计划将来将这个VBA应用程序转换为独立的VB.NET,那么这是可能的,并且它是否可行?

1 个答案:

答案 0 :(得分:4)

一个不错的选择是将您的集合存储为XML文件。之后添加或阅读单个元素相对容易;如果你试图将4维数据排列到二维电子表格中,你将不可避免地出现索引噩梦。它们是文本文件,因此人类可读;如果文件大小成问题,只需压缩它们。

您只需要设计一个合适的格式,即标签名称等,请参阅本答案末尾的示例。

编辑:如果将数据打包到Excel工作簿中对您来说非常重要,那么您可以将xml代码打到其中一个工作表上并将其存储在那里......我之前已经这样做了。

创建一个XML文档,如下所示:

Set xmlFatAssCollectionA = CreateObject("Msxml2.DOMDocument.6.0")

然后编辑它:循环遍历您的集合,并根据需要将每个元素附加为较大集合的子元素。完成后,保存XML文档。

xmlFatAssCollectionA.save("C:\MyDir\MyCollection.xml")

文档:http://msdn.microsoft.com/en-us/library/ms756987%28v=VS.85%29.aspx

您可以使用XPath访问所需的节点/元素。 XPath tutorial

以下是您生成的xml文件的外观。我只添加了一个collectionB对象,并省略了整个collectionA图层,但是你明白了。

<?xml version="1.0" encoding="ISO-8859-1"?>

<bObject>
  <cObject>
    <contentObject>
      <title lang="da">Kejserens nye klæder</title>
      <author>H.C. Andersen</author>
      <price>priceless</price>
    </contentObject>
  </cObject>
  <cObject>
     <contentObject>
      <title lang="en">Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </contentObject>
    <contentObject>
      <title lang="fr">Les Schtroumpfs</title>
      <author>Some person</author>
      <year>1985</year>
    </contentObject>
  </cObject>
</bObject>