求各位大神帮忙看看,在一个表里面的数据分为等级,PID = -1 的是最上级,通过typeid来区分上下级,导出的事要想图里那样,我是实在弄不出来了,几天了,求大神解答,真心感谢了

解决方案 »

  1.   


    //先添加引用:Microsoft.Office.Interop.Excel
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using Excel = Microsoft.Office.Interop.Excel;static class Program
    {
    static void Main()
    {
    string[] cols = { "id", "classes", "typeID", "pID", "typeName", "typeLevel", "sortID" };
    var dt = new DataTable();
    dt.Columns.AddRange(cols.Select(c=>new DataColumn(c)).ToArray());
    var testRows = new List<object[]>
    {
    new object[] {1, 1, 1001, -1, "1", 1, 1},
    new object[] {5, 1, 2001, -1, "2", 1, 1},
    new object[] {6, 1, 3001, -1, "3", 1, 1},
    new object[] {7, 1, 4001, -1, "4", 1, 1},
    new object[] {2, 1, 1002, 1001, "11", 1, 1},
    new object[] {3, 1, 1003, 1002, "111", 1, 1},
    new object[] {4, 1, 1004, 1002, "111", 1, 1},
    new object[] {9, 1, 1005, 1002, "111", 1, 1},
    new object[] {10, 1, 1006, 1002, "111", 1, 1},
    };
    testRows.ForEach(r=>dt.Rows.Add(r)); Func<DataRow, DataRow[]> children, descendants = null;
    children = r => dt.Select("pID=" + r["typeID"], "sortID");
    descendants = r => children(r).SelectMany(r1 => new[]{r1}.Union(descendants(r1))).ToArray(); var excel = new Excel.Application();
    Excel.Workbook book = excel.Workbooks.Add();
    Excel.Worksheet sheet = book.Worksheets[1]; Func<int, char> colName = c => (char) ('A' + c - 1);
    Action<DataRow[], int, int> exportRows = null;
    exportRows = (dataRows, row, col) =>
    {
    foreach (var dr in dataRows)
    {
    sheet.Cells[row, col].Value = dr["typeName"];
    var lines = descendants(dr).Count(r => children(r).Length == 0);
    if (lines > 1)
    {
    string range = string.Format("{0}{1}:{0}{2}",colName(col), row, row + lines - 1);
    sheet.get_Range(range).Merge();
    exportRows(children(dr), row, col + 1);
    }
    else if (lines == 0 && col == 2)
    {
    string range = string.Format("{1}{0}:{2}{0}", row, colName(col), colName(3));
    sheet.get_Range(range).Merge();
    }
    row += Math.Max(lines, 1);
    }
    }; sheet.Cells[1, 1].Value = "类型";
    sheet.Cells[1, 2].Value = "内容";
    sheet.get_Range("B1:C1").Merge(); var level1 = dt.Select("pID=-1", "sortID");
    exportRows(level1, 2, 1); excel.DisplayAlerts = false;
    book.SaveAs(@"d:\test.xlsx");
    excel.Quit();
    }
    }
      

  2.   

    最简单的做法,自己拼一个table,然后输出出来就可以了
      

  3.   

    各位,不好意思,忘记说了,数据是添加进去的,不是固定的,就是因为是不固定,所以我才解决不了,等于说这个Excel里面的内容是没有固定性的。
      

  4.   

    这有啥呀 不就是合并单元格么  随便一款dll都可以实现一般来说 我用MyXls合并无压力