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 ...
随机推荐
- db2 常用配置
db2set配置: db2set DB2_ENABLE_LDAP=NO db2set DB2_ALTERNATE_GROUP_LOOKUP=GETGROUPLIST db2set DB2_RESTOR ...
- UIAlerView、UIActionSheet 和UIAlertViewController(点击注销确认按钮实现)
- (IBAction)loginOut:(UIBarButtonItem *)sender { UIActionSheet *actionSheet = [[UIActionSheet alloc] ...
- js事件监听-addEventListener (w3c标准) 和 attachEvent(ie)
研究了一个小时,没看懂这两个属性 window.onload = function(){ var oDiv = document.getElementById("J_myDiv") ...
- validate验证
导入需要的js 自动验证 <script src="${ctx }/static/assets/js/jquery-2.1.4.min.js">< ...
- 微信内置浏览器私有接口WeixinJSBridge介绍(转)
这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友.分享函数.隐藏工具栏.隐藏三个点按钮等功能,需要的朋友可以参考下 微信网页进入,右上角有三个小点,没错, ...
- C++友元
通过friend关键字,我们可以将不属于当前类的一个函数在当前类中加以声明,该函数便可以成为当前类的友元函数. 例1: #include<iostream>using namespace ...
- C#调用托管C++类(DLL)
毕设是做一个网络摄像头的相关应用.界面用WPF,图像处理部分是OpenCV.没用EmguCV的原因是国内EmguCV的资料相对比较少,EmguCV虽然提供了Winform的控件,在做UI上有一定优势, ...
- webStorm(一)
1.打开webStorm选择activation code输入注册码 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIj ...
- SSLPinning 延伸
AFSecurityPolicy用于验证HTTPS请求的证书,先来看看HTTPS的原理和证书相关的几个问题. HTTPS HTTPS连接建立过程大致是,客户端和服务端建立一个连接,服务端返回一个证书, ...
- 为XYplorer添加右键菜单:“使用XYplorer打开”
在目录.磁盘右键添加: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Shell\XYplorer]"E ...