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 ...
随机推荐
- 启动Mysql报错:Another MySQL daemon already running with the same unix socket.
启动Mysql报错: Another MySQL daemon already running with the same unix socket. 删除如下文件即可解决 /var/lib/mysql ...
- asp.net MVC Session锁的问题
一直在用Session,对Session锁并没有太多的关注,可能是平时没有注意.前段时间突然发现,一个Ajax Get请求,直接访问地址,只需要几十ms,但是在页面中加载,却需要2s.最后定位到Ses ...
- 8、关于viewWithTag
1.viewWithTag检索tag的方法问题viewWithTag方法会对当前View和其子View进行搜索,查找符合tag的对象,但如果view和其多个子view中都含有相同tag值对象时,该方法 ...
- 用PhotoSwipe制作相册,手势可放大
1.引入css和js <link href="css/photoswipee.css" rel="stylesheet" type="text/ ...
- 【转】JQuery.Ajax之错误调试帮助信息
下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...
- SQL LIKE语句多条件贪婪匹配算法
在CMS开发中,经常会有类似这样的需求: 提问——回答模式,最经典的例子就是百度提问. 提问者提出问题,由其他人回答,其他人可以是用户,也可以是服务商. 在这个模式中,如何充分利用历史数据是最关键的技 ...
- CreateProcess函数诡异的表现
场景:程序A使用CreateProcess函数去启动另一个程序(.exe)文件,在绝大部分情况下是可以成功启动的,但是在某些电脑上无效. 因为这“某些电脑”实在不好找,终于有一天借到一台这样的电脑. ...
- ionic 进入多级目录以后隐藏底部导航栏(tabs)(完美解决方案)
公司开始使用ionic开发项目,在此记录下把遇到的问题,网上有大牛已经把解决方法整出来了,不过记录在自己这里方便查阅. 这篇记录在有tabs的项目里,进入子层级时,底部导航还一直存在,本人是要让他只在 ...
- modelsim+win环境下systemverilog调用c函数
最近为了验证一个ip,需要将ip的输出数据与c model的数据比对,之前采用的是将仿真结果输出,用perl读取结果,与c的输出结果比对,这样做也可以,但是在做遍历测试时,由于数据量较大,就显得不方便 ...
- AIDL机制实现进程间的通讯实例
转载自:http://blog.csdn.net/cjjky/article/details/7562652 ======================================= 在Andr ...