求各位大神帮忙看看,在一个表里面的数据分为等级,PID = -1 的是最上级,通过typeid来区分上下级,导出的事要想图里那样,我是实在弄不出来了,几天了,求大神解答,真心感谢了
解决方案 »
- table控件的使用!急救!Q
- 继续问问,用CheckBox批量修改数据,小弟刚学,大哥大姐指导一下!分少别嫌弃
- 将数据打印到一个已经有表格的纸上,怎么对齐?
- 怎么前台计算后台读取出来的数据数量
- 我都有点不好意思问了!各位大哥不要笑我,小弟在线跪求!!!
- VS .NET 中有导出发布文件的功能吗?
- 关于 IFRAME 窗体传值
- TreeView 递归 去 一个节点下 所有 叶子节点的问题,在线等待高人帮忙,急~!
- [关于乱码]我有两个站点,一个是用gb2312,还有一个utf-8
- 运行ASP.NET程序的问题
- FileUpload怎么自定义上传的文件名
- asp.net formview的edit模式下中如何使用radiolist绑定sqlserver里的bit数据(checkbox也行)
//先添加引用: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();
}
}