NPOI操作Excel

本文介绍了如何使用NPOI库进行Excel文件的操作,包括导入、导出。NPOI是一个支持.Net4.0及以上的开源库,适用于处理不同版本的Excel文件,提供了UserModel和EventUserModel两种用户模式,满足不同需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     NPOI POI .Net 版本,可以在没安装 MS Office 的情况下操作 office 文档 ( OLE 2 复合文档结构 word 文档, excel 文件等 ).

     使用NPOI只要引用dll就可,可在npoi.codeplex.com下载,NPOI 1.25支持.Net4.0,最新的版本是NPOI 2.0 RC。NPOI采用Apache2.0协议,从开发成员列表里看到很多的chinese,TonyQu

     主要命名空间有HSSF (Horrible SpreadSheet Format)、SS等。 在POI中,HSSF是指2007年以前的,XSSF是指2007年版本以上的 ,NPOI高版本中提倡不区分这种分别。

    NPOI也有2种用户模式,UserModelEventUserModelUserModel满足一般的读写操作等,EventUserModel比前者有更高要求,需要使用者理解文档结构.(EventUserModel中只能进行读操作,这个自己没试过)。


  列出asp.netExcel文件导入导出操作:

上传Excel文件

<form id="form1" runat="server">
    <div>
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="BtnUpload" runat="server" Text="upload" OnClick="BtnUpload_Click" />
    </div>
</form>

//后台
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

namespace Excel.NPOI
{
    public partial class Import : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void BtnUpload_Click(object sender, EventArgs e)
        {
            if (this.FileUpload1.PostedFile == null) return;

            Stream fileStream = this.FileUpload1.PostedFile.InputStream;
            IWorkbook workbook = new HSSFWorkbook(fileStream);

            if (workbook == null || workbook.NumberOfSheets == 0) return;

            ISheet sheet = workbook.GetSheetAt(0);

            if (sheet.PhysicalNumberOfRows == 0) return;

            IRow headRow = sheet.GetRow(0);

            DataTable table = new DataTable();
            foreach (ICell cell in headRow.Cells)
                table.Columns.Add(new DataColumn(cell.StringCellValue));

            for (int i = 1; i < sheet.PhysicalNumberOfRows; i++)
            {
                DataRow newrow = table.NewRow();
                foreach(ICell cell in sheet.GetRow(i).Cells)
                {
                   //转换复制
                }

                table.Rows.Add(newrow);
            }

        }
        //continue
    }
}



导出并下载

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

namespace Excel.NPOI
{
    public partial class Export : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ResponseStream();
            

        }


        private void ResponseStream()
        {
            string fileName = "成绩单.xls";//显示的文件名称


            DataTable table = GetData();//获取所有待导出数据
            MemoryStream ms = new MemoryStream();//内存流
            IWorkbook workbook = new HSSFWorkbook();//建立excel文件
            ISheet sheet = workbook.CreateSheet();//建立工作表
            IRow headRow = sheet.CreateRow(0);//标题行


            //手动设置各列,注意顺序要一致.
            headRow.CreateCell(0).SetCellValue("准考证号");
            headRow.CreateCell(1).SetCellValue("考点");
            headRow.CreateCell(2).SetCellValue("考场");


            int rowIndex = 1;
            foreach (DataRow row in table.Rows)
            {
                IRow dataRow = sheet.CreateRow(rowIndex);
                dataRow.CreateCell(0).SetCellValue(row[0].ToString());
                dataRow.CreateCell(1).SetCellValue(row[1].ToString());
                dataRow.CreateCell(2).SetCellValue(row[2].ToString());
                rowIndex++;
            }

            workbook.Write(ms);
            ms.Flush();
            ms.Position = 0;

            if (Request.Browser.Browser == "IE")
                fileName = HttpUtility.UrlEncode(fileName);
            Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
            Response.BinaryWrite(ms.ToArray());
            Response.End();
        }

        private DataTable GetData()
        {
            DataTable table = new DataTable();
            table.Columns.Add(new DataColumn("准考证号"));
            table.Columns.Add(new DataColumn("考点"));
            table.Columns.Add(new DataColumn("考场"));

            DataRow row1 = table.NewRow();
            row1[0] = "111";
            row1[1] = "考点1";
            row1[2] = "1001";

            table.Rows.Add(row1);

            return table;
        }
    }
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值