原文: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)(转)的更多相关文章

  1. ASP.NET操作Excel(终极方法NPOI)

    ASP.NET操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,能够帮助开发者在没有安装微软Office的情况下读写Office 97-200 ...

  2. asp.net 操作Excel大全

    asp.net 操作Excel大全 转:http://www.cnblogs.com/zhangchenliang/archive/2011/07/21/2112430.html 我们在做excel资 ...

  3. VBS操作Excel常见方法

    VBS操作Excel常见方法 作者: 字体:[增加 减小] 类型:转载 时间:2009-11-13我要评论 VBS控制Excel常见方法,需要的朋友可以参考下. dim oExcel,oWb,oShe ...

  4. 在 VS2008 下操作 Excel 的方法总结

      这些天做个软件,需要读取 Excel 并导入到数据库中,所以研究了一下在 VC 下操作 Excel 的方法,这里做个总结,以作备忘. 一.最常用的 OLE 自动化方式 这个方式应该说是功能最全的方 ...

  5. Net操作Excel,不依赖服务器端环境配置(终极方法NPOI)转。

    这是起因,为什么会需要用到这个,主要是分析了一下为什么从oledb那个方式换成这个方式.文章见链接 http://www.cnblogs.com/Jerseyblog/p/6410703.html 前 ...

  6. ASP.NET操作Excel

    使用NPOI操作Excel,无需Office COM组件 部分代码来自于:https://docs.microsoft.com/zh-tw/previous-versions/ee818993(v=m ...

  7. C#项目中操作Excel文件——使用NPOI库

    转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...

  8. ASP.NET导出excel表方法汇总

    asp.net里导出excel表方法汇总  1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...

  9. 用VB操作Excel的方法

    VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便.因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报 ...

随机推荐

  1. 使用C#三维绘图控件快速搭建DXF查看程序

    本例使用AnyCAD .Net三维图形控件快速实现一个DXF文件的读取.显示.导出JPG.PNG.PDF的应用. 代码: using System; using System.Collections. ...

  2. CentOS6.5_python2.7.3下virt-manager无法启动

    配置virt-manager: 1.安装virt-manager, libvirt, qemu-kvm 2.配置libvirtd开机启动: chkconfig libvirtd on   #取消开机启 ...

  3. 对于返回void类型的asyc的异步方法,如何修改,能使用await

    下面是使用WebClinet 获取百度首页的html代码,一般的写法如下: private void Button_Click(object sender, RoutedEventArgs e) { ...

  4. mysql数据库去重语句和不同表之间列的复制语句

    1.去重语句:DELETE FROM `v_klg_item` WHERE id NOT IN (SELECT * FROM (SELECT MAX(id) FROM `v_klg_item` GRO ...

  5. javascript 数组对象与嵌套循环写法

    'use strict' var info=[{"name":"最近想跳河","interst":["历史"," ...

  6. Pass Dynamic Value to a Grid Label

     A grid label is the blue (normally) colored grid header that you see on PeopleSoft pages. The grid ...

  7. FileUpload无法赋值解决方案

    FileUpload无法赋值解决方案 编写人:CC阿爸 2015-1-27 今天在这里,我想与大家一起分享如何处理fileupload控件不能赋值的问题.有兴趣的同学,可以一同探讨与学习一下,否则就略 ...

  8. zookeeper典型应用场景之一:master选举

    对于zookeeper这种东西,仅仅知道怎么安装是远远不够的,至少要对其几个典型的应用场景进行了解,才能比较全面的知道zk究竟能干啥,怎么玩儿,以后的日子里才能知道这货如何能为我所用.于是,有了如下的 ...

  9. Java实现抽奖游戏

    代码如下: import java.io.*; public class PresentDemo { /** * @param args */ public static void main(Stri ...

  10. does not match bootstrap parameter

    问题描述: DBD::mysql object version 2.0419 does not match bootstrap parameter 2.0902 at /usr/libdata/per ...