TreeNode导出为ex​​cel

时间:2017-03-01 18:46:36

标签: c# .net excel treeview

我正在尝试导出一个树视图,它有几个节点,子节点要excel。到目前为止的进展是以下代码。

如何提取所有节点和子节点以分隔列?

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

1 个答案:

答案 0 :(得分:0)

我相信您正在寻找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());

    }
}

这个小函数使用递归调用以从“root”开始出现的顺序打印出树的所有节点。我认为从这个起点开始你应该能够很容易地解决这个问题。如果没有,请告诉我(或者如果这甚至不是你想要的)。这是一个c ++示例,但它仍然可以帮助你。

编辑:跟踪遍历深度(Traversing a tree of objects in 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);
}