首页 > 代码库 > NPOI的使用

NPOI的使用

简介NPOI是POI(APATCH的一个开源项目)项目的.NET版本,最初的POI只用于JAVA来操作EXCEL or WORD等微软OLE2组件项目。使用NPOI可以完成在你没有安装Office或者相应环境的机器上对WORD/EXCEL文档进行读写。

使用案例分享(NPOI针对DATATABLE导出EXCEL):

完成此任务应该准备的DLL:NPOI.DLL ,官网下载链接:http://npoi.codeplex.com/

1.将npoi.dll引用到项目的bin目录中:

2.添加完成之后,代码例子开始:

(对于这种以后项目里可能会经常使用到的工具类,本人建议直接创建一个公共的Respository,相信你懂我的用意)

这里我创建了一个ExcelHelper.cs类,其中需要引用以下几个npoi相关的namespace

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

导出的测试代码:(经过测试,可正常使用,这个方法需要优化的地方挺多,有兴趣的话可以自己拿去改善

 1 public static void TableToExcelForXLS(DataTable dt, string file,string entityName) //dt:你需要导出的数据,file:导出路径,entityName:实体名称 2         { 3             HSSFWorkbook hssfworkbook = new HSSFWorkbook(); 4             ISheet sheet = hssfworkbook.CreateSheet("Test"); 5  6             //表头 7             IRow row = sheet.CreateRow(0); 8             //for (int i = 0; i < dt.Columns.Count; i++) 9             //{10             string[] str = { "a", "b", "c", "d", "e", "f" };11             string[] sysSelect = {"A", "B", "C", "D"};12             if (entityName == "XuDaxia")13             {14                 //表头15                 for (int j = 0; j < str.Count(); j++)16                 {17                     ICell cell = row.CreateCell(j);18                     cell.SetCellValue(str[j]);19                 }20                 //数据21                 for (int i = 0; i < dt.Rows.Count; i++)22                 {23                     IRow row1 = sheet.CreateRow(i + 1);24                     for (int j = 0; j < dt.Columns.Count; j++)25                     {26                         ICell cell = row1.CreateCell(j);27                         cell.SetCellValue(dt.Rows[i][j].ToString());28                     }29                 }30             }31             else32             {33                 //表头34                 for (int j = 0; j < sysSelect.Count(); j++)35                 {36                     ICell cell = row.CreateCell(j);37                     cell.SetCellValue(sysSelect[j]);38                 }39                 //数据40                 for (int i = 0; i < dt.Rows.Count; i++)41                 {42                     IRow row1 = sheet.CreateRow(i + 1);43                     for (int j = 0; j < dt.Columns.Count; j++)44                     {45                         ICell cell = row1.CreateCell(j);46                         cell.SetCellValue(dt.Rows[i][j].ToString());47                     }48                 }49             }50             

方法调用:

1  protected void btn_ExportExcel(object sender, ImageClickEventArgs e)2     {3         var name = DateTime.Now.ToString("yyyyMMdd") + new Random(DateTime.Now.Second).Next(10000);//导出的Excel默认名称4         var path = Server.MapPath("XUDAXIA_TEST/" + name + ".xls");//导出路径5         var dt = list.ToDataTable();6         string ef= "Xudaxia";7         ExcelHelper.x2003.TableToExcelForXLS(dt, path, ef);  //2003 版Excel示例8         downloadfile(path);9     }

输出参数配置:

void downloadfile(string s_path)    {        System.IO.FileInfo file = new System.IO.FileInfo(s_path);        HttpContext.Current.Response.ContentType = "application/ms-download";        HttpContext.Current.Response.Clear();        HttpContext.Current.Response.AddHeader("Content-Type", "application/octet-stream");        HttpContext.Current.Response.Charset = "utf-8";        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8));        HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());        HttpContext.Current.Response.WriteFile(file.FullName);        HttpContext.Current.Response.Flush();        HttpContext.Current.Response.Clear();        HttpContext.Current.Response.End();    }

 

NPOI的使用