Asp.net操作Excel(终极方法NPOI)(转)
先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。
另:http://files.cnblogs.com/zhongxinWang/NPOI.rar
一:将数据导出到excel
List<>作为数据源
//创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("降雨量日报表");
//获取list数据
List<ST_RainInfo_Day> listRainInfo = ST_RainInfo_Day_Helper.ObjectList(dtBeginDate, dtEndDate);
//给sheet1添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue("站名");
row1.CreateCell(1).SetCellValue("河名");
row1.CreateCell(2).SetCellValue("地址");
row1.CreateCell(3).SetCellValue("日雨量");
row1.CreateCell(4).SetCellValue("时间");
row1.CreateCell(5).SetCellValue("天气");
//将数据逐步写入sheet1各个行
for (int i = 0; i < listRainInfo.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
rowtemp.CreateCell(0).SetCellValue(listRainInfo[i].STNM.ToString());
rowtemp.CreateCell(1).SetCellValue(listRainInfo[i].RVNM.ToString());
rowtemp.CreateCell(2).SetCellValue(listRainInfo[i].STLC.ToString());
rowtemp.CreateCell(3).SetCellValue(listRainInfo[i].DYP.ToString());
rowtemp.CreateCell(4).SetCellValue(listRainInfo[i].TM.ToString());
//用GetWether方法进行数据转换
rowtemp.CreateCell(5).SetCellValue(GetWether(listRainInfo[i].WTH.ToString()));
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();
DataTable作为数据源
DataTable dt = GetData();
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("特征值报表");//雨情 NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue("站号");
row1.CreateCell(1).SetCellValue("站名");
row1.CreateCell(2).SetCellValue("平均降雨(mm)");
row1.CreateCell(3).SetCellValue("总降雨量(mm)");
row1.CreateCell(4).SetCellValue("最大测站降雨(mm)");
row1.CreateCell(5).SetCellValue("最小测站降雨(mm)");
for (int i = 0; i < dt.Rows.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
rowtemp.CreateCell(0).SetCellValue(dt.Rows[i]["STCD"].ToString());
rowtemp.CreateCell(1).SetCellValue(dt.Rows[i]["STNM"].ToString());
rowtemp.CreateCell(2).SetCellValue(dt.Rows[i]["AvgDYP"].ToString());
rowtemp.CreateCell(3).SetCellValue(dt.Rows[i]["SumDYP"].ToString());
rowtemp.CreateCell(4).SetCellValue(dt.Rows[i]["MaxDYP"].ToString());
rowtemp.CreateCell(5).SetCellValue(dt.Rows[i]["MinDYP"].ToString());
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();
二:从Excel中导入数据到
可先将excel文件上传到服务器的临时位置,获取filePath,然后再行读取、导入。
HSSFWorkbook hssfworkbook;
#region
public DataTable ImportExcelFile(string filePath)
{
#region//初始化信息
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
}
catch (Exception e)
{
throw e;
}
#endregion NPOI.SS.UserModel.Sheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
DataTable dt = new DataTable(); //给DdataTable添加表头
for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
{
dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
} //读取数据
while (rows.MoveNext())
{
HSSFRow row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();
for (int i = 0; i < row.LastCellNum; i++)
{
NPOI.SS.UserModel.Cell cell = row.GetCell(i);
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();
}
}
dt.Rows.Add(dr);
}
return dt;
}
#endregion
三:大于65535条记录
//创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("sheet1"); //sheet列表,防止记录条数大于65535
List<NPOI.SS.UserModel.ISheet> sheetList = new List<NPOI.SS.UserModel.ISheet>();
sheetList.Add(sheet1);
//给sheet1添加数据
SheetFirst(sheet1, book, datalist);
//给其他sheet添加数据 从1开始:去掉第一个sheet +2是有表头和标题的那2行
int rows = datalist.Count + 2;
int p = rows % 65535 == 0 ? rows / 65535 : (rows / 65535) + 1;
for (int i = 1; i < p; i++)
{
NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("sheet" + (i + 1).ToString());
//为sheet添加数据
SheetElse(sheet, (i - 1) * 65535 + 65533, datalist);
} // 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();
//第一个Sheet
protected void SheetFirst(NPOI.SS.UserModel.ISheet sheet1, NPOI.HSSF.UserModel.HSSFWorkbook book, List<ST_WaterLevel_GradualMonth> datalist)
{
//标题
NPOI.SS.UserModel.ICell cellTitle = sheet1.CreateRow(0).CreateCell(0);
cellTitle.SetCellValue("水位月报表--" + drpCategory.SelectedItem.Text);
//设置标题行样式
NPOI.SS.UserModel.ICellStyle style = book.CreateCellStyle();
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
NPOI.SS.UserModel.IFont font = book.CreateFont();
font.FontHeight = 20 * 20;
style.SetFont(font);
cellTitle.CellStyle = style;
//合并标题行
sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 9)); //给sheet1添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(1);
row1.CreateCell(0).SetCellValue("序号");
row1.CreateCell(1).SetCellValue("测站编码");
row1.CreateCell(2).SetCellValue("测站名称");
row1.CreateCell(3).SetCellValue("河流名称");
row1.CreateCell(4).SetCellValue("日期");
row1.CreateCell(5).SetCellValue("平均水位");
row1.CreateCell(6).SetCellValue("八点水位");
row1.CreateCell(7).SetCellValue("零点水位");
//将数据逐步写入sheet1各个行
for (int i = 0; i < datalist.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 2);
rowtemp.CreateCell(0).SetCellValue(datalist[i].Row.ToString());
rowtemp.CreateCell(1).SetCellValue(datalist[i].STCD.ToString());
rowtemp.CreateCell(2).SetCellValue(datalist[i].STNM.ToString());
rowtemp.CreateCell(3).SetCellValue(datalist[i].RVNM.ToString());
rowtemp.CreateCell(4).SetCellValue(datalist[i].TM.ToString());
rowtemp.CreateCell(5).SetCellValue(datalist[i].AvgLevel.ToString());
rowtemp.CreateCell(6).SetCellValue(datalist[i].EightLevel.ToString());
rowtemp.CreateCell(7).SetCellValue(datalist[i].ZeroLevel.ToString());
}
}
//其他sheet
protected void SheetElse(NPOI.SS.UserModel.ISheet sheet, int j, List<ST_WaterLevel_GradualMonth> datalist)
{
//将数据逐步写入sheet1各个行
for (int i = 0; j + i < datalist.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet.CreateRow(i);
rowtemp.CreateCell(0).SetCellValue(datalist[j + i].Row.ToString());
rowtemp.CreateCell(1).SetCellValue(datalist[j + i].STCD.ToString());
rowtemp.CreateCell(2).SetCellValue(datalist[j + i].STNM.ToString());
rowtemp.CreateCell(3).SetCellValue(datalist[j + i].RVNM.ToString());
rowtemp.CreateCell(4).SetCellValue(datalist[j + i].TM.ToString());
rowtemp.CreateCell(5).SetCellValue(datalist[j + i].AvgLevel.ToString());
rowtemp.CreateCell(6).SetCellValue(datalist[j + i].ZeroLevel.ToString());
}
}
转自http://www.cnblogs.com/zhongxinWang/archive/2012/08/07/2627476.html
Asp.net操作Excel(终极方法NPOI)(转)的更多相关文章
- ASP.NET操作Excel(终极方法NPOI)
ASP.NET操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,能够帮助开发者在没有安装微软Office的情况下读写Office 97-200 ...
- asp.net 操作Excel大全
asp.net 操作Excel大全 转:http://www.cnblogs.com/zhangchenliang/archive/2011/07/21/2112430.html 我们在做excel资 ...
- VBS操作Excel常见方法
VBS操作Excel常见方法 作者: 字体:[增加 减小] 类型:转载 时间:2009-11-13我要评论 VBS控制Excel常见方法,需要的朋友可以参考下. dim oExcel,oWb,oShe ...
- 在 VS2008 下操作 Excel 的方法总结
这些天做个软件,需要读取 Excel 并导入到数据库中,所以研究了一下在 VC 下操作 Excel 的方法,这里做个总结,以作备忘. 一.最常用的 OLE 自动化方式 这个方式应该说是功能最全的方 ...
- Net操作Excel,不依赖服务器端环境配置(终极方法NPOI)转。
这是起因,为什么会需要用到这个,主要是分析了一下为什么从oledb那个方式换成这个方式.文章见链接 http://www.cnblogs.com/Jerseyblog/p/6410703.html 前 ...
- ASP.NET操作Excel
使用NPOI操作Excel,无需Office COM组件 部分代码来自于:https://docs.microsoft.com/zh-tw/previous-versions/ee818993(v=m ...
- C#项目中操作Excel文件——使用NPOI库
转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...
- ASP.NET导出excel表方法汇总
asp.net里导出excel表方法汇总 1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...
- 用VB操作Excel的方法
VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便.因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报 ...
随机推荐
- 在阿里云 CentOS 服务器(ECS)上搭建 nginx + mysql + php-fpm 环境
阿里云的云服务器(ECS)可以选择多种操作系统,打算用它运行 Drupal或者 WordPress ,你最好选择 Linux 系统,这篇文章的演示是基于阿里云的 CentOS 操作系统的服务器.我们在 ...
- 打地鼠游戏ios源码
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- iOS Architecture Patterns
By Bohdan Orlov on 21 Mar 2016 - 0 Comments iOS FYI: Slides from my presentation at NSLondon are ava ...
- sqlserver 保留小数方法
1. 使用 Round() 函数,如 Round(@num,2) 参数 2 表示 保留两位有效数字. 2. 更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,dec ...
- JS模块化工具requirejs教程(一):初识requirejs
随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...
- Sql Server 常用的查询
基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 selec ...
- ThinkPHP之中的事务回滚
小李子 获取thinkphp之中执行的SQL: 1.用调试模式的追踪trace功能: 2.代码: $user_type=D('user_type'); $datass=array('school_id ...
- Python脚本控制的WebDriver 常用操作 <九> 定位一组对象
下面将使用WebDriver来模拟操作定位一组对象的操作 测试用例场景 从上一节的例子中可以看出,webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需 ...
- public、private、protected 与 默认 等访问修饰符
1)public(公共的):被public修饰的属性和方法可以被所有类访问. 2)private(私有的):被private修饰的属性和方法只能在改类的内部使用. 3)protected(受保护的): ...
- hdu 4255 A Famous Grid
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...