【问题标题】:TreeNode export to excelTreeNode 导出到 excel
【发布时间】:2017-03-01 18:46:35
【问题描述】:

我正在尝试导出一个树视图,它有几个节点,子节点到 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);
}

【问题讨论】:

  • 你能举一个简单的输入/输出案例的例子吗(即给定一棵树,这个方法的输出是什么)?这将有助于为您的问题提供更明确的答案。
  • 从下面的网络图像中,树视图看起来像这样。但没有复选框codeproject.com/Articles/202435/Tri-State-Tree-View
  • 树视图看起来像让例如我有这棵树 - 从你的一个例子中得到这个。动物 狗 猫 鱼 淡水 蟑螂 鲷 咸水 溜冰 溜冰 儿童 灵魂
  • 好的。您是否可以编辑您的问题以添加该树的结构,然后在上面添加您的方法的预期输出?我正在想象一个包含某些列的表格,但我不确定您希望这些列在哪里停止。在这种情况下,列会是“狗”、“猫”、“鱼”等吗?
  • 类似于这张图片,如果有助于理解的话。 social.msdn.microsoft.com/Forums/getfile/115327

标签: c# .net excel treeview


【解决方案1】:

我相信您正在寻找中序树遍历?除非我误解了什么。

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());

    }
}

这个小函数使用递归调用,按照它们从“根”开始出现的顺序打印出树的所有节点。我认为有了这个起点,您应该能够相当容易地弄清楚这一切。如果没有,请告诉我(或者如果这甚至不是您想要的)。这是一个 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);
}

【讨论】:

  • 是的,我看到了,你需要修改我给你的代码来计算你在树中的深度。如果您在“第一级”(或根),则插入到第 1 列,并排除第 2 列和第 3 列。 stackoverflow.com/questions/443695/… 这应该可以帮助您跟踪您在递归中的嵌套程度。
  • 如果有一个简单的答案,我将不胜感激,我是编程新手
  • @Flaxolce 我希望我的编辑能帮助更多。老实说,如果您是编程新手,那么首先编写一个数组以使其成为 excel 可能对您更有用。穿越树有点高级,你有点直接跳到池子的深处,不知道游泳是什么。无论哪种方式,如果这仍然令人困惑,我仍然会在这里为您提供更多帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多