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 ...
随机推荐
- [HMLY]1.CocoaPods详解----使用
作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 转载请注明出处 一.什么是cocoaPods 1.为 ...
- django模板 实现奇偶分行
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vga显示彩条
vga显示驱动程序可分为扫描行列和行列同步两个部分 //注意:只有在有效区域内给vga赋值才会有颜色变化 assign vga_b = isready ? vga_s[:] :'d0; assign ...
- Python 智能处理方向的工具
机器视觉类:OpenCV. 自然语言处理:NLTK, jieba(Python中文分词组件),HanLP, FudanNLP, NLPIR, http://tm.itc.ntnu.edu.tw/CNL ...
- ie6的png24问题
解决IE6的PNG透明JS插件 DD_belatedPNG 引:http://www.cnblogs.com/cobby/archive/2012/05/11/2495801.html IE6的PNG ...
- vs2010帮助文档下载以及帮助查看器(H3Viewer)的使用
在工作中遇到想查看vs2010的帮助文档.推荐使用H3Viewer.一个第三方的免费软件,独立于VS2010运行的帮助查看器.这方面的资料并不多.把本次自己使用的心得分享给大家. H3Viewer官方 ...
- Gradle学习草稿
参考博客:http://www.cnblogs.com/davenkin/p/gradle-learning-1.html Android Plugin DSL Reference http://go ...
- SuperSocket源码解析之开篇 (转)
一 简介 官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 S ...
- 忘记linux用户名和密码怎么解决?
开机进入单用户模式,可跳过密码验证修改root密码. 具体步骤如下: 开机读秒时键盘上按回车 通过操纵键盘上下方向键选择系统版本,然后按下E 通过操纵键盘上下方向键选择kernel所在行,再次按下E进 ...
- TortoiseGit HTTPS方式保存密码最简单的方法
在TortoiseGit的设置 -> git 中选择 编辑本地 .git/config 在最后增加下面内容: [credential] helper = store