阿里云折扣码

轻云博客 > C#技术 > NPOI的下载、引用、基本使用

NPOI的下载、引用、基本使用

作者:Travel-day.cn / 日期:2020-6-15 1:28:00 / 分类:C#技术 / 浏览:2608

问题背景

工作中,需要将datatable导出到excel。最终的方案是用NPOI来完成这个功能,最后也顺利的完成了。这里把它总结一下。


开始

插一句,有没有小伙伴不知道引用文件是什么意思、引用的是什么东西的?笔者也是最近才反应过来这个问题。引用的是dll文件,而dll文件呢,是后台代码编译之后的二进制机器码文件,windows可直接执行。这里引用别人的dll,就相当于多了一部分后台代码,而且已经编译好了。 


首先去官网下载NPOI

http://npoi.codeplex.com/releases/1

然后我们打开解压好的文件,我们这里只需要引用NPOI.dll和NPOI.OOXML.dll 

到VS界面,添加引用,添加完成后,可以在引用里面看到。

using NPOI; 

using NPOI.SS.UserModel; 

using NPOI.HSSF.UserModel; 

using NPOI.XSSF.UserModel;


然后就可以愉快的使用了。

页面上放一个button,点击事件是导出excel。

首先我们通过后台代码从数据库获取到datatable,然后利用NPOI将该dataTable导出到excel。

完整代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data;

using System.Data.SqlClient;

using System.Text;

using System.IO;


using NPOI;

using NPOI.SS.UserModel;

using NPOI.HSSF.UserModel;

using NPOI.XSSF.UserModel;


namespace NPOI_Test1

{

public partial class Page1 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {



    }


    protected void btnExport_Click(object sender, EventArgs e)

    {

        SqlConnection cn = new SqlConnection();

        cn.ConnectionString = "server=.;uid=sa;pwd=密码不告诉你;database=dawufan";

        cn.Open();

        string sqlstr = @"select * from interest";

        SqlCommand cmd = new SqlCommand();

        cmd.Connection = cn;

        cmd.CommandText = sqlstr;

        SqlDataReader reader = cmd.ExecuteReader();

        DataTable dt = ReaderToTable(reader);


        ExportExcel(dt);


        cn.Close();

        cn.Dispose();

        cmd.Dispose();

        reader.Close();

        dt.Dispose();

    }


    protected DataTable ReaderToTable(SqlDataReader dr)

    {

        DataTable dt = new DataTable();


        for (int i = 0; i < dr.FieldCount; i++)

        {

            dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i));

        }


        object[] objValues = new object[dr.FieldCount];

        while (dr.Read())

        {

            dr.GetValues(objValues);

            dt.LoadDataRow(objValues, true);

        }

        dr.Close();

        return dt;

    }


    protected void ExportExcel(DataTable dt)

    {

        HttpContext curContext = HttpContext.Current;

        //设置编码及附件格式

        curContext.Response.ContentType = "application/vnd.ms-excel";

        curContext.Response.ContentEncoding = Encoding.UTF8;

        curContext.Response.Charset = "";

        string fullName = HttpUtility.UrlEncode("FileName.xls", Encoding.UTF8);

        curContext.Response.AppendHeader("Content-Disposition",

            "attachment;filename=" + HttpUtility.UrlEncode(fullName, Encoding.UTF8));  //attachment后面是分号


        byte[] data = TableToExcel(dt, fullName).GetBuffer();

        curContext.Response.BinaryWrite(TableToExcel(dt, fullName).GetBuffer());

        curContext.Response.End();

    }


    public MemoryStream TableToExcel(DataTable dt, string file)

    {

        //创建workbook

        IWorkbook workbook;

        string fileExt = Path.GetExtension(file).ToLower();

        if (fileExt == ".xlsx")

            workbook = new XSSFWorkbook();

        else if (fileExt == ".xls")

            workbook = new HSSFWorkbook();

        else

            workbook = null;

        //创建sheet

        ISheet sheet = workbook.CreateSheet("Sheet1");


        //表头

        IRow headrow = sheet.CreateRow(0);

        for (int i = 0; i < dt.Columns.Count; i++)

        {

            ICell headcell = headrow.CreateCell(i);

            headcell.SetCellValue(dt.Columns[i].ColumnName);

        }

        //表内数据

        for (int i = 0; i < dt.Rows.Count; i++)

        {

            IRow row = sheet.CreateRow(i + 1);

            for (int j = 0; j < dt.Columns.Count; j++)

            {

                ICell cell = row.CreateCell(j);

                cell.SetCellValue(dt.Rows[i][j].ToString());

            }

        } 

        //转化为字节数组

        MemoryStream ms = new MemoryStream();

        workbook.Write(ms);

        ms.Flush();

        ms.Position = 0;

        return ms;

    } 

}





结束 

————————————————

版权声明:本文为CSDN博主「Fanstorm丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wf824284257/article/details/77113691


本文标签:datatable导出到excel
From:
分享到: