ASP.NET中的Excel操作(NPOI方式)
代码准备:
一:实体准备
代码如下:
/// <summary>
/// 一个能添加到将要导出到指定行的实体类型规范
/// data:{int StartColIndex ? 0, int ColSpan, object Value, bool Center}
/// </summary>
public interface IExcelModel
{
/// <summary>
/// 开始列的索引(即使是有合并单元格的情况,也得按未合并单元格时算)
/// </summary>
int StartColIndex { get; set; }
/// <summary>
/// 这个值一共占多少个单元格
/// </summary>
int ColSpan { get; set; }
/// <summary>
/// 值
/// </summary>
object Value { get; set; }
/// <summary>
/// 是否居中
/// </summary>
bool Center { get; set; }
}
上面的接口代码,是对要生成的Excel的单元格的规范,Center:表示是否居中,Value:表示显示的值,ColSpan:表示单元格(列)的合并数,
StartColIndex:表示是第几个单元格,而且跟单元格的合并没有关系。
二:帮助方法类(Helper)准备
/// <summary>
/// 使用NPOI由IList<List<IExcelModel>> datas导出Excel
/// </summary>
public static void ExportDataSetToExcel(string fileName, HSSFWorkbook book, ISheet sheet, IList<List<IExcelModel>> datas)
{
MemoryStream ms = ExportDataSetToExcel(book,sheet,datas) as MemoryStream;
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8));
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
HttpContext.Current.Response.End();
ms.Close();
ms = null;
}
上面方法中,IList<List<IExcelModel>>表示的是一个List<IExcelModel>的集合,而每一个List<IExcelModel>就是一些个单元格的集合,也就是一行。IList<List<IExcelModel>>就是表示要生成的Excel表是由多行的数据组成的。
fileName表示最后要保存的文件名,要带后缀名。
上面方法需要引用的方法代码如下:
private static Stream ExportDataSetToExcel(HSSFWorkbook book, ISheet sheet, IList<List<IExcelModel>> datas)
{
// create memory stream
MemoryStream ms = new MemoryStream(); // process excel file
AddDatasToExcelSheet(book, sheet, datas); book.Write(ms);
ms.Flush();
ms.Position = ;
book = null;
return ms;
}
上面方法需要引用的方法代码如下:
/// <summary>
/// 将指定数据构造到 Excel 中
/// </summary>
/// <param name="book"></param>
/// <param name="sheet"></param>
/// <param name="datas"></param>
public static void AddDatasToExcelSheet(HSSFWorkbook book, ISheet sheet, IList<List<IExcelModel>> datas)
{
for (int i = ; i < datas.Count(); i++)
{
AddDatasToExcelRow(book, sheet, i, datas[i]);
}
} /// <summary>
/// 添加一个数据集合到将要导出的 Excel 的指定行。
/// </summary>
public static void AddDatasToExcelRow(HSSFWorkbook book, ISheet sheet, int rowIndex, List<IExcelModel> datas)
{
IRow row = sheet.CreateRow(rowIndex);
ICellStyle cs = book.CreateCellStyle();
foreach (dynamic data in datas)
{
ICell cell = row.CreateCell(data.StartColIndex);
cell.SetCellValue(data.Value);
if (data.ColSpan > )
{
CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, data.StartColIndex, data.StartColIndex + data.ColSpan - );
sheet.AddMergedRegion(cra);
}
if (data.Center)
{
//ICellStyle cs = book.CreateCellStyle();//放在这里会报错:The maximum number of cell styles was exceeded. You can define up to 4000 styles cs.VerticalAlignment = VerticalAlignment.Center;
cs.Alignment = HorizontalAlignment.Center;
cell.CellStyle = cs;
}
}
}
代码实战:
IList<List<IExcelModel>> excelList = new List<List<IExcelModel>>();
//第一行
List<IExcelModel> firstRow = new List<IExcelModel>();
//第一个单元格
IExcelModel tempFRCell = new ExcelModel() { StartColIndex = , ColSpan = , Center = true, Value = "" };
//把第一个单元格添加到第一行中
firstRow.Add(tempFRCell);
//把第一个行添加到excelList
excelList.Add(firstRow); //最后的
HSSFWorkbook book = new HSSFWorkbook();
ISheet sheet = book.CreateSheet();
//book.Add(sheet);
ExcelConstructHelper.ExportDataSetToExcel("示例.xls", book, sheet, excelList);
这样就可以实现网页上直接下载一个Excel文件了。
未解决的问题:
1:单元格的纵向合并
2:单元格及行的样式
如何将这两个都融合到上面提到的规范中去???
----------------------------------------------欢迎批评与交流!!!--------------------------
ASP.NET中的Excel操作(NPOI方式)的更多相关文章
- ASP.NET中的Excel操作(OLEDB方式)
一:OLEDB方式操作Excel的个人理解 就是把要操作的Excel当作一个数据库,所有对Excel的操作,就变成了对“数据库”的操作.那么这时就需要有一个数据库的连接字符串. 代码如下: connS ...
- ASP.net中导出Excel的简单方法介绍
下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...
- ASP.net 中手工调用WS(POST方式)
ASP.net 中手工调用WS(POST方式)核心代码:string strUrl="http://localhost:21695/service1.asmx/getmythmod" ...
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
- Asp.Net中的三种分页方式
Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...
- 报表中的Excel操作之Aspose.Cells(Excel模板)
原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...
- C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation
C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...
- Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)
有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...
- winform excel导入--NPOI方式
项目中要用到excel导入数据,用NPOI方式做了一个demo,记录如下: Form1代码: public Form1() { InitializeComponent(); } private voi ...
随机推荐
- 使用automake等命令自动生成Makefile文件
参考:http://www.cnblogs.com/njucslzh/archive/2010/04/29/1723320.html
- 解锁Oracle数据库用户
Oracle数据库,如何解除数据库用户账户的锁定呢???如何修改口令呢??? 请问各位高手:Oracle数据库,如何解除数据库用户账户的锁定呢???如何修改口令呢???[万分感激各位高手的帮忙] 00 ...
- Java 并发 关键字volatile
Java 并发 关键字volatile @author ixenos volatile只是保证了共享变量的可见性,不保证同步操作的原子性 同步块 和 volatile 关键字机制 synchroniz ...
- 一篇顺手的Ubuntu+caffe配置笔记
主要参考: https://github.com/lbzhang/dl-setup http://ouxinyu.github.io/Blogs/20151108001.html http://www ...
- Filewatcher
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- 洛谷-均分纸牌-NOIP2002提高组复赛
题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸 ...
- Ansible Lookup
1. 文件内容的读取 --- - hosts: all vars: contents: "{{ lookup('file', '/etc/foo.txt') }}" tasks: ...
- 关闭Pycharm拼写检查(Mac)
1.关闭拼写检查,preference-->Editor-->Inspections-->Spelling-->Typo,取消勾选 2.关闭代码风格检查,preference- ...
- Flashbuilder 破解方式 4.6 +4.7(网络资源整理)
Fb4.6 破解方式 安装完成后在安装目录下依次修改下列3个文件: (1).eclipse\plugins\com.adobe.flexbuilder.project_4.6.0.328916\MET ...
- drupal7 sql接口笔记
1.查询: execute() ->fetch():从结果集中取出一行作为一个对象 execute() ->fetchField():获取单个值 execute() ->fetchA ...