NPOI(1):Asp.net操作Excel

原文:Asp.net操作Excel(终极方法NPOI)

先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。

另:http://files.cnblogs.com/zhongxinWang/NPOI.rar

导出xlsx:http://www.cnblogs.com/zhongxinWang/p/4157674.html

一:将数据导出到excel

List<>作为数据源

//创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheetNPOI.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());
            }
        }
时间: 2024-12-10 17:09:34

NPOI(1):Asp.net操作Excel的相关文章

Asp.net操作Excel常用方法及属性

// 设置单元格格式为文本 range.NumberFormatLocal = "@"; // 获取Excel多个单元格区域:本例做为Excel表头 range = (Range)worksheet.get_Range("A1", "E1"); // 单元格合并动作 range.Merge(0); // Excel单元格赋值 worksheet.Cells[1, 1] = "Excel单元格赋值"; // 设置字体大小 ran

asp.net 操作Excel大全

asp.net 操作Excel大全 转:http://www.cnblogs.com/zhangchenliang/archive/2011/07/21/2112430.html 我们在做excel资料的时候,通常有以下方法. 一.导入导出excel常用方法: 1.用查询表的方式查询并show在数据集控件上.   代码 public static string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =C:\\08.

Asp.net操作Excel

using System; using System.IO; using System.Web; using System.Text; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Runtime.InteropServices; using System.Data; /// <summary> ///ExportToExcel 的摘要说明

Asp.Net使用org.in2bits.MyXls.dll操作excel的应用

首先下载org.in2bits.MyXls.dll(自己的在~\About ASP.Net\Asp.Net操作excel) 添加命名空间: using org.in2bits.MyXls;using System.IO; 思路: 添加引用 (using org.in2bits.MyXls)→  创建空xls文档(XlsDocument) → 得到数据 →  创建一个工作页(Worksheet) →  设置xls文档的指定工作页的行(RowInfo) →  设置xls文档的指定工作页的列(Colu

Asp.net操作Excel----NPOI!!!!1

前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使 用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作. 方法 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net

oledb 操作 excel

oledb excel http://wenku.baidu.com/search?word=oledb%20excel&ie=utf-8&lm=0&od=0 [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你! http://www.cnblogs.com/wolf-sun/p/3589605.html asp.net操作Excel(向excel模板添加数据) http://www.cnblogs.com/Silverlight_Team/

c# ASP.Net 使用开源免费类库操作Excel

主要找到以下类库: MyXls(http://sourceforge.net/projects/myxls/) Koogra(http://sourceforge.net/projects/koogra/) ExcelLibrary(http://code.google.com/p/excellibrary/) ExcelPackage(http://excelpackage.codeplex.com/) EPPlus(http://epplus.codeplex.com/) LinqToExc

Net操作Excel(终极方法NPOI)

http://www.cnblogs.com/stone_w/archive/2012/08/02/2620528.html Net操作Excel(终极方法NPOI) 前言 Asp.net/C#操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等.NPOI是构建在POI 3.x版本之上的,它可以在

ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)

网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的Excel有三列(姓名.年龄.性别)//列之间用\t隔开StringWriter sw = new StringWriter();sw.WriteLine("姓名\t年龄\t性别"); //Excel表格的列标题 sw.WriteLine("张三\t29\t男"); /