asp.net 使用NPOI对数据导出excel

导航

NPOI导出excel篇
NPOI导入excel篇

前言

数据导出这个功能很常见,平时也是经常要用到,asp.net 中要实现这个功能。
一般来就是两种方法,一种是利用HttpResponse获取HTTP响应数据流写入到excel文件,但这个方法,相对来说实现比较烦琐,而且效率不高,重点我按网上那些写法导出的文件是打不开的。
所以我选择另一种方法,别人写好的开源插件,一般C#导出导入excel使用的是NPOI或MyXls,这篇文章就是介绍使用NPOI。

使用前准备

首先得先去下载NPOI的dll,这个可以选择到官网下载:http://npoi.codeplex.com/releases/
百度搜索下载,
或者到我的github里下载:https://github.com/LittleNewGod/My-CSharp
下载回来解压后就有这些文件

asp.net 使用NPOI对数据导出excel_第1张图片

这时候就需要将上图中圈上的两个dll文件引用到自己的项目里

引用完后就需要将这些类using进来

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

这样就可以开始愉快使用NPOI的功能了。

#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)
    {
        DataSet ds = null;//这里ds是执行自己的方法,处理数据库获取DataSet对象
        DataTable dt = ds.Tables[0];
        ExportExcel(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;
    }
   
}
备注:

这里的NPOI版本是.net 4.0 版本的,如果版本不适合的,可以自行下载自己合适的版本,或者找其他方法实现。

asp.net 使用NPOI对数据导出excel_第2张图片
更多资料免费获取.jpg

你可能感兴趣的:(asp.net 使用NPOI对数据导出excel)