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


前言

總渴望去擁有那些自己沒有的東西,比如經驗、能力;但自己擁有的更為重要的東西,卻如此的不珍惜,比如青春。所以啊,趁着青春多寫點代碼,就能讓自己早一步去渴望重新擁有青春了。

問題背景

工作中,需要將datatable導出到excel。最終的方案是用NPOI來完成這個功能,最后也順利的完成了。這里把它總結一下。

NPOI的下載及引用

插一句,有沒有小伙伴不知道引用文件是什么意思、引用的是什么東西的?筆者也是最近才反應過來這個問題。引用的是dll文件,而dll文件呢,是后台代碼編譯之后的二進制機器碼文件,windows可直接執行。這里引用別人的dll,就相當於多了一部分后台代碼,而且已經編譯好了。

我們開始吧。

首先去官網下載NPOI

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

然后解壓一下,就有這個了

#######################1111111111111

然后我們打開解壓好的文件,打開release文件夾,看到有net20和net40文件夾,這里我們打開net40,可以看到一些dll文件。我們這里只需要引用NPOI.dll和NPOI.OOXML.dll

到VS界面,添加引用,選擇剛剛那2個dll,並確定。添加完成后,可以在引用里面看到。 
這里寫圖片描述

接下來 using這些

using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
  • 1
  • 2
  • 3
  • 4
  • 5

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

NPOI的基本使用

頁面上放一個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;
    }


}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM