TreeNode导出为Excel

我正试图导出一个treeview有几个节点,子节点要优秀。 目前的进展是下面的代码。

我怎样才能提取所有的节点和孩子节点到独立的列?

string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); using (StreamWriter sw = new StreamWriter(mydocpath + @"\MaterialList.csv")) foreach (TreeNode node in treeView1.Nodes) { sw.WriteLine(node); } 

我相信你正在寻找Inorder Tree Traversal? 除非我误解了一些东西。

http://www.cplusplus.com/forum/beginner/131457/

 void Tree:: Inorder(Node* Root) { if(Root != NULL) { Inorder(Root->Left()); cout << Root->Key() << endl; Inorder(Root->Right()); } } 

这个小函数使用recursion调用按照从“root”开始的顺序打印出树的所有节点。 我认为,从这个出发点来看,你应该能够相当容易地把它全部弄清楚。 如果没有,请让我知道(或者如果这不是你要找的东西)。 这是一个C ++的例子,但它应该仍然帮助你。

编辑:跟踪遍历深度( 遍历c#中的对象树 ):

 printRoot(Node node) { printNode(node, 0); } printNode(Node node, int level) { printTitle(node.title) foreach (Node child in node.children) { printNode(child, level + 1); //<-- recursive } } 

编辑2:由于你仍然不确定如何使用这个我会写出代码。

 public void InorderTraversal(TreeNode root){ InorderTraversal(root, 0); } public void InorderTraversal(TreeNode root, int level){ //this is where you write to excel. You can also use 'level' to decide if you insert in column 1, 2, or 3 just by using a simple if statement like this: if(level == 0) sw.WriteLine(node, level.ToString()); foreach (TreeNode child in root.children){ //depending on how your tree is implemented this is probably either going to be root.children or root.next InorderTraversal(child, level + 1); } } 

要在你的代码中使用这个:

 void main(void){ InorderTraversal(treeView1.Nodes); }