效果图:

前台调用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using ExportCells; namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
/***********************参数赋值***********************/ //设置列
List<ExportCells.AsposeHelper.JqxTableColumns> columns = new List<ExportCells.AsposeHelper.JqxTableColumns>();
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "id" });
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "name", columngroup = "namesex" });
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "sex", columngroup = "namesex" });
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "id2" });
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "cat", columngroup = "Animal" });
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "dog", columngroup = "Animal" });
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "rabbit", columngroup = "Animal" });
columns.Add(new ExportCells.AsposeHelper.JqxTableColumns() { text = "id3" }); //设置分组
List<ExportCells.AsposeHelper.JqxTableColumnsGroup> group = new List<ExportCells.AsposeHelper.JqxTableColumnsGroup>();
group.Add(new ExportCells.AsposeHelper.JqxTableColumnsGroup() { name = "Animal", text = "动物" });
group.Add(new ExportCells.AsposeHelper.JqxTableColumnsGroup() { name = "namesex", text = "名字性别" }); //设置数据
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("sex");
dt.Columns.Add("id2");
dt.Columns.Add("cat");
dt.Columns.Add("dog");
dt.Columns.Add("rabbit");
dt.Columns.Add("id3");
var dr = dt.NewRow();
dr[0] = 0;
dr[1] = 1;
dr[2] = 2;
dr[3] = 3;
dr[4] = 4;
dr[5] = 5;
dr[6] = 6;
dr[7] = 7;
dt.Rows.Add(dr);
var dr2 = dt.NewRow();
dr2[0] = 10;
dr2[1] = 11;
dr2[2] = 12;
dr2[3] = 13;
dr2[4] = 14;
dr2[5] = 15;
dr2[6] = 16;
dr2[7] = 17;
dt.Rows.Add(dr2); AsposeHelper.SaveColumnsHierarchy("1.xls", columns, group, dt);
}
}
}

  

ASPOSE封装类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Aspose.Cells;
using System.Data;
using System.Drawing;
using System.Web; namespace ExportCells
{
/// <summary>
/// ** 描述:Aspose
/// ** 创始时间:2015-9-10
/// ** 修改时间:-
/// ** 修改人:sunkaixuan
/// ** 使用说明:
/// </summary>
public class AsposeHelper
{
/// <summary>
/// 导出EXCEL并且动态生成多级表头
/// </summary>
/// <param name="columns">列</param>
/// <param name="group">分组</param>
/// <param name="dt">dataTable</param>
/// <param name="path">保存路径</param>
public static void SaveColumnsHierarchy(List<JqxTableColumns> columns, List<JqxTableColumnsGroup> group, DataTable dt, string path)
{ Workbook workbook = new Workbook(); //工作簿
Worksheet sheet = workbook.Worksheets[0]; //工作表
Cells cells = sheet.Cells;//单元格
for (int i = 0; i <= dt.Rows.Count + 1; i++)
{
sheet.Cells.SetRowHeight(i, 30);
}
List<AsposeCellInfo> acList = new List<AsposeCellInfo>();
List<string> acColumngroupHistoryList = new List<string>();
int currentX = 0;
foreach (var it in columns)
{
AsposeCellInfo ac = new AsposeCellInfo();
ac.y = 0;
if (it.columngroup == null)
{
ac.text = it.text;
ac.x = currentX;
ac.xCount = 1;
acList.Add(ac);
currentX++;
ac.yCount = 2;
}
else if (!acColumngroupHistoryList.Contains(it.columngroup))//防止重复
{
var sameCount = columns.Where(itit => itit.columngroup == it.columngroup).Count();
ac.text = group.First(itit => itit.name == it.columngroup).text;
ac.x = currentX;
ac.xCount = sameCount;
acList.Add(ac);
currentX = currentX + sameCount;
acColumngroupHistoryList.Add(it.columngroup);
ac.yCount = 1;
ac.groupName = it.columngroup;
}
else
{
//暂无逻辑
}
}
//表头
foreach (var it in acList)
{
cells.Merge(it.y, it.x, it.yCount, it.xCount);//合并单元格
cells[it.y, it.x].PutValue(it.text);//填写内容
cells[it.y, it.x].SetStyle(_thStyle);
if (!string.IsNullOrEmpty(it.groupName))
{
var cols = columns.Where(itit => itit.columngroup == it.groupName).ToList();
foreach (var itit in cols)
{
var colsIndex = cols.IndexOf(itit);
cells[it.y + 1, it.x + colsIndex].PutValue(itit.text);//填写内容
cells[it.y + 1, it.x + colsIndex].SetStyle(_thStyle);
}
}
}
//表格
if (dt != null && dt.Rows.Count > 0)
{
var rowList = dt.AsEnumerable().ToList();
foreach (var it in rowList)
{
int dtIndex = rowList.IndexOf(it);
var dtColumns = dt.Columns.Cast<DataColumn>().ToList();
foreach (var itit in dtColumns)
{
var dtColumnsIndex = dtColumns.IndexOf(itit);
cells[2 + dtIndex, dtColumnsIndex].PutValue(it[dtColumnsIndex]);
cells[2 + dtIndex, dtColumnsIndex].SetStyle(_tdStyle); }
}
}
workbook.Save(path);
} /// <summary>
/// 导出EXCEL并且动态生成多级表头
/// </summary>
/// <param name="columns">列</param>
/// <param name="group">分组</param>
/// <param name="dt">dataTable</param>
/// <param name="path">保存路径</param>
public static void SaveColumnsHierarchy(string fileName,List<JqxTableColumns> columns, List<JqxTableColumnsGroup> group, DataTable dt)
{ Workbook workbook = new Workbook(); //工作簿
Worksheet sheet = workbook.Worksheets[0]; //工作表
Cells cells = sheet.Cells;//单元格
for (int i = 0; i <= dt.Rows.Count + 1; i++)
{
sheet.Cells.SetRowHeight(i, 30);
}
List<AsposeCellInfo> acList = new List<AsposeCellInfo>();
List<string> acColumngroupHistoryList = new List<string>();
int currentX = 0;
foreach (var it in columns)
{
AsposeCellInfo ac = new AsposeCellInfo();
ac.y = 0;
if (it.columngroup == null)
{
ac.text = it.text;
ac.x = currentX;
ac.xCount = 1;
acList.Add(ac);
currentX++;
ac.yCount = 2;
}
else if (!acColumngroupHistoryList.Contains(it.columngroup))//防止重复
{
var sameCount = columns.Where(itit => itit.columngroup == it.columngroup).Count();
ac.text = group.First(itit => itit.name == it.columngroup).text;
ac.x = currentX;
ac.xCount = sameCount;
acList.Add(ac);
currentX = currentX + sameCount;
acColumngroupHistoryList.Add(it.columngroup);
ac.yCount = 1;
ac.groupName = it.columngroup;
}
else
{
//暂无逻辑
}
}
//表头
foreach (var it in acList)
{
cells.Merge(it.y, it.x, it.yCount, it.xCount);//合并单元格
cells[it.y, it.x].PutValue(it.text);//填写内容
cells[it.y, it.x].SetStyle(_thStyle);
if (!string.IsNullOrEmpty(it.groupName))
{
var cols = columns.Where(itit => itit.columngroup == it.groupName).ToList();
foreach (var itit in cols)
{
var colsIndex = cols.IndexOf(itit);
cells[it.y + 1, it.x + colsIndex].PutValue(itit.text);//填写内容
cells[it.y + 1, it.x + colsIndex].SetStyle(_thStyle);
}
}
}
//表格
if (dt != null && dt.Rows.Count > 0)
{
var rowList = dt.AsEnumerable().ToList();
foreach (var it in rowList)
{
int dtIndex = rowList.IndexOf(it);
var dtColumns = dt.Columns.Cast<DataColumn>().ToList();
foreach (var itit in dtColumns)
{
var dtColumnsIndex = dtColumns.IndexOf(itit);
cells[2 + dtIndex, dtColumnsIndex].PutValue(it[dtColumnsIndex]);
cells[2 + dtIndex, dtColumnsIndex].SetStyle(_tdStyle); }
}
}
var response = HttpContext.Current.Response;
response.Clear();
response.Buffer = true;
response.Charset = "utf-8";
response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
response.ContentEncoding = System.Text.Encoding.UTF8;
response.ContentType = "application/ms-excel";
response.BinaryWrite(workbook.SaveToStream().ToArray());
response.End();
} private static Style _thStyle
{
get
{
Style s = new Style();
s.Font.IsBold = true;
s.Font.Name = "宋体";
s.Font.Color = Color.Black;
s.HorizontalAlignment = TextAlignmentType.Center; //标题居中对齐
return s;
}
} private static Style _tdStyle
{
get
{
Style s = new Style();
return s;
}
} public class JqxTableColumns
{
public string field { get; set; }
public string cellsAlign { get; set; }
public string align { get; set; }
public string text { get; set; }
public string columngroup { get; set; }
} public class JqxTableColumnsGroup
{
public string text { get; set; }
public string align { get; set; }
public string name { get; set; }
} public class AsposeCellInfo
{
public string text { get; set; }
public int x { get; set; }
public int xCount { get; set; }
public int y { get; set; }
public int yCount { get; set; }
public string groupName { get; set; }
}
}
}

  

最新文章

  1. C/C++ 中的include
  2. 网站设置404页面 --nginx
  3. vertica 8.0 新特性
  4. Java 第7章 数组
  5. 【BZOJ】1998: [Hnoi2010]Fsk物品调度
  6. HDU 4473 Exam 枚举
  7. Android动画translate坐标图
  8. C++ RTTI
  9. http状态码介绍
  10. angularjs的页面拆分思想
  11. HDU 1728 逃离迷宫(BFS)
  12. POJ 1989
  13. [杂题]CSUOJ1413 Area of a Fractal
  14. Primavera——免费版本的下载和使用
  15. Javascript中的this关键字用法详解
  16. java操作Jacoco合并dump文件
  17. codeforces 735C Tennis Championship(贪心+递推)
  18. 模拟银行ATM系统(基础版)
  19. Springboot+Thymeleaf+layui框架的配置与使用
  20. 【BZOJ4259】残缺的字符串

热门文章

  1. 闲暇时间开发的个人app
  2. ZooKeeper快速搭建
  3. Undokumentierte @Formeln/LotusScript im Lotus Notes Client/Server
  4. 10条现代EQ技术基础贴士(转)
  5. Android定位&amp;地图&amp;导航——自定义公交路线代码
  6. 第一部分:IBM量子体验
  7. Linux64位服务器编译安装MySQL5.6(CentOS6.4)
  8. iOS开发 - AVPlayer实现流音频边播边存
  9. [AX2012]Claims user
  10. asp.net项目在IE11下出现“__doPostBack”未定义的解决办法