我设置了许多集合和对象,这些集合和对象具有四层深度的一对多关系。 CollectionA
包含许多CollectionB
个对象,CollectionB
包含多个CollectionC
个对象,CollectionC
包含多个Content
个对象。
在用户花费时间用所需数据填充所有这些集合和对象之后,他们需要能够保存每个对象的所有属性,然后读取输出文件并从它们停止的位置开始。
我知道这是一个有点广泛的问题,所以我希望看到我应该在研究方向上采用哪个方向来解决这个问题。现在我最关心的是文件I / O,我正在考虑两种不同的路径。
这是一个excel项目,所以我想我可以从上到下遍历所有集合和对象,并将它们的值写入电子表格,然后遍历电子表格行并将其输出到分隔的文本文件。然后反过来读取文本文件 - 从文本到电子表格,然后从电子表格到集合和对象。
也许另一种选择是绕过电子表格并使用TextStream?如果我计划将来将这个VBA应用程序转换为独立的VB.NET,那么这是可能的,并且它是否可行?
答案 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>