Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递归树视图建筑(使用颜色)_C#_Excel_Colors_Treeview_Treenode - Fatal编程技术网

C# 递归树视图建筑(使用颜色)

C# 递归树视图建筑(使用颜色),c#,excel,colors,treeview,treenode,C#,Excel,Colors,Treeview,Treenode,我目前正在构建一个小型的C应用程序,使用户能够将一些数据从Excel转换为另一张工作表中的另一种视图 在该数据中,有一个层次结构:实体>扇区>子扇区>分区>…>房间 ... 这意味着最多可以有3个额外的未命名步骤 如您所见,数据基于颜色,橙色为实体,~灰色为扇区,蓝色为子扇区,白色为房间 当用户加载Excel文件时,它还将工作表名称作为实体加载,并将其添加到树视图中;以下是方法: private void BT_load_Click(object sender, EventArgs e) {

我目前正在构建一个小型的C应用程序,使用户能够将一些数据从Excel转换为另一张工作表中的另一种视图

在该数据中,有一个层次结构:实体>扇区>子扇区>分区>…>房间 ... 这意味着最多可以有3个额外的未命名步骤

如您所见,数据基于颜色,橙色为实体,~灰色为扇区,蓝色为子扇区,白色为房间

当用户加载Excel文件时,它还将工作表名称作为实体加载,并将其添加到树视图中;以下是方法:

private void BT_load_Click(object sender, EventArgs e)
{
    Tools.SelectExcelFile(OF_xls);
    try
    {
        xlApp = new Excel.Application();
        xlWorkbook = xlApp.Workbooks.Open(LB_path.Text, 3, 1);

        Template_Metro test = new Template_Metro();
        foreach(Excel.Worksheet wSheet in xlWorkbook.Worksheets)
        {
            test.Entites.Add(new Entite(wSheet.Name));
        }
        foreach(Entite entite in test.Entites)
        {
            myTreeView.Nodes.Add(entite.Nom);
        }
     }
     catch(Exception x)
     {
        Tools.ErrorBox(x);
     }
}
加载操作完成后,用户在树视图中选择一个节点,我们将使用CoeurDePole作为示例,并提示用户选择图片上黑框中的内容。 当用户选择Excel上的数据并单击“创建”按钮时,应使用相应的层次结构更新树

    //IN THE FORM CLASS
    private void BT_create_Click(object sender, EventArgs e)
    {
        if (myTreeView.SelectedNode != null)
        {
            Excel.Range selection = xlApp.Selection;
            Tools.AddNodes(selection, myTreeView);
        }
        else
        {
            MessageBox.Show("Sélectionnez une entité dans laquelle ajouter les données", "Erreur");
        }           
    }

    //IN THE STATIC TOOLS CLASS
    public static void AddNodes(Excel.Range selectedCells, 
                                TreeView treeView)
    {
        
        List<Color> colors = GetColors(selectedCells);
        
        try
        {
            /* 
            * This creates simple nodes within the selected node
            * foreach (Excel.Range cell in selection.Cells)
            * {
            *     treeView.SelectedNode.Nodes.Add(((Excel.Range)cell).Value2.ToString());
            * }
            */
        }
        catch
        {
            MessageBox.Show("Aucunes cellules sélectionnées!", "Erreur");
        }
    }

    public static List<Color> GetColors(Excel.Range selection)
    {
        List<Color> colors = new List<Color>();
        Color color;

        foreach (Excel.Range selectionCell in selection.Cells)
        {
            color = ColorTranslator.FromOle(Convert.ToInt32(selectionCell.Interior.Color));

            if (colors.Contains(color) == false)
            {
                colors.Add(color);
            }
        }
        
        return colors;
    }
此外,我还创建了与实体、扇区…相对应的简单类,每个类都包含来自较低层次结构的对象列表。e、 g.类实体包含一个扇区列表

提前感谢您提供的任何帮助,我不需要C答案,但非常感谢您提供的一些算法帮助


Elliott

没有一种算法可以模仿人脑。大部分颜色是随机的。我会首先修复工作表,使颜色一致。没有颜色的行是A列包含数据的行。所以第13行和第15行我会在A列中添加数据。不幸的是A列并不总是包含数据。。。我之所以使用颜色,是因为在每个项目中,excel文件都包含一个固定的颜色代码。是客户机修复数据,因为他们所建的房间包含或不包含有用的数据,然后修复创建excel文件的人的颜色不一致。也许一把枪会有帮助。但是仍然不能回答我的问题,关于如何根据本例中使用的颜色代码递归创建treenode:p