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的强大报表功来实现报 ...
随机推荐
- Android中SearchView修改字体颜色
首先获取searchView控件,比如在actionbar上获取: SearchView searchView = (SearchView) menu.findItem(R.id.action_sea ...
- 实例分析ELF文件动态链接
参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台 ...
- [视频]物联网应用-ARM mbed-来至MultiTech Systems的解决方案
ARM公司面向物联网及可穿戴市场,近期可谓是动作频频,先是发布了专为物联网及可穿戴领域而生的Cortex-M7架构,接着又发布了mbed物联网操作系统.意图在物联网领域构筑一套坚不可摧的生态系统. 这 ...
- 常见的HTTP错误总结
一般来说HTTP2XX,代表请求正常完成,HTTP3XX代表网站重定向,HTTP4XX,代表客户端出现错误,HTTP5XX,代服务器端出现了错误 HTTP301:请求的数据具有新的位置 HTTP302 ...
- 线程间通信--wait和notify
使用wait.notify方法实现线程间的通信(注意这两个方法都是object的类的方法,换句话说java为所有的对象都提供了这两个方法) 1.wait和notify必须配合synchronized关 ...
- php static延迟静态绑定
如果你是一个懒惰的程序员,你看到以下代码可能会恼火 abstract class U{ } class u1 extends U{ public static function create(){ r ...
- Windows Server 2003开机自动启动MySQL服务设置方法
Windows Server 2003开机自动启动MySQL服务设置方法 发布时间:2014-12-19 更新时间:2014-12-24 来源:网络 作者:eaglezhong 关键词: 2003 e ...
- iOS反射机制
iOS属性反射:说白了,就是将两个对象的所有属性,用动态的方式取出来,并根据属性名,自动绑值.(注意:对象的类,如果是派生类,就得靠其他方式来实现了,因为得到不该基类的属性.) 本人常用的反射方式,有 ...
- rails devise使用
gem 'devise'rails g devise:install Userrails g devise Userrails g devise:views
- 【转】Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败
错误原因如下: Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cannot ...