日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET NPOI导出Excel详解

發(fā)布時(shí)間:2023/11/29 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET NPOI导出Excel详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.cnblogs.com/yinrq/p/5590970.html

?

?

.NET NPOI導(dǎo)出Excel詳解

NPOI,顧名思義,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java寫成的庫,能夠幫助開發(fā)者在沒有安裝微軟Office的情況下讀寫Office的文件。

支持的文件格式包括xls, doc, ppt等。

官方網(wǎng)站:http://npoi.codeplex.com/

nuget直接獲取使用

一、NPOI生成Excel

//創(chuàng)建工作薄var workbook = new HSSFWorkbook();//創(chuàng)建表var table = workbook.CreateSheet("joye.net");//模擬20行20列數(shù)據(jù)for (var i = 0; i < 20; i++){var row = table.CreateRow(i);for (int j = 0; j < 20; j++){var cell = row.CreateCell(j);cell.SetCellValue(j);}}//打開xls文件,如沒有則創(chuàng)建,如存在則在創(chuàng)建是不要打開該文件using (var fs = File.OpenWrite(@"c:/joye.net.xls")){workbook.Write(fs); //向打開的這個(gè)xls文件中寫入mySheet表并保存。Console.WriteLine("生成成功");}

二、NPOI讀取Excel

using (var fs = File.OpenRead(@"c:/joye.net.xls")) {//把xls文件中的數(shù)據(jù)寫入workbook1中var workbook1 = new HSSFWorkbook(fs);for (var i = 0; i < workbook1.NumberOfSheets; i++){var sheet = workbook1.GetSheetAt(i);for (var j = 0; j <= sheet.LastRowNum; j++){ //讀取當(dāng)前行數(shù)據(jù)var row = sheet.GetRow(j);if (row != null){for (var k = 0; k <= row.LastCellNum; k++){ //當(dāng)前表格var cell = row.GetCell(k);if (cell != null){Console.Write(cell.ToString() + " ");}}}Console.WriteLine();}}}

讀出的結(jié)果

?三、簡單學(xué)習(xí)

?學(xué)習(xí)代碼 ?代碼調(diào)用

四、NPOI導(dǎo)出Excel 65536問題

public static HSSFWorkbook BuildWorkbook(DataTable dt){var book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("Sheet1");//Data Rowsfor (int i = 0; i < dt.Rows.Count; i++){IRow drow = sheet.CreateRow(i);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}//自動列寬for (int i = 0; i <= dt.Columns.Count; i++)sheet.AutoSizeColumn(i, true);return book;}

NPOI導(dǎo)出Excel超過65536會報(bào)異常,原來是由于NPOI這個(gè)動態(tài)庫導(dǎo)致的,然后看了下版本,發(fā)現(xiàn)是1.2.5。然后百度了下,發(fā)現(xiàn)這個(gè)版本的NPOI只支持office2003,二office2003最多支持65536行

解決方式:

1、只是在插入數(shù)據(jù)的時(shí)候,加個(gè)判斷,如果數(shù)據(jù)條數(shù)大于65536時(shí),就在創(chuàng)建一個(gè)sheet

//65536判斷處理public static HSSFWorkbook BuildWorkbook(DataTable dt){var book = new HSSFWorkbook();ISheet sheet1 = book.CreateSheet("Sheet1");ISheet sheet2 = book.CreateSheet("Sheet2");//填充數(shù)據(jù)for (int i = 0; i < dt.Rows.Count; i++){if (i < 65536){IRow drow = sheet1.CreateRow(i);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}if (i >= 65536){IRow drow = sheet2.CreateRow(i - 65536);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}}//自動列寬for (int i = 0; i <= dt.Columns.Count; i++){sheet1.AutoSizeColumn(i, true);sheet2.AutoSizeColumn(i, true);}return book;}

2、考慮使用高版本Office,使用用對象支持高版本的NPOI

//高版本public static XSSFWorkbook BuildWorkbook(DataTable dt){var book = new XSSFWorkbook();ISheet sheet = book.CreateSheet("Sheet1");//Data Rowsfor (int i = 0; i < dt.Rows.Count; i++){IRow drow = sheet.CreateRow(i);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}//自動列寬for (int i = 0; i <= dt.Columns.Count; i++)sheet.AutoSizeColumn(i, true);return book;}

五、web開發(fā)中導(dǎo)出Excel

public static void ExportExcel(DataTable dt, string fileName = ""){//生成ExcelIWorkbook book = BuildWorkbook(dt);//web 下載if (fileName == "")fileName = string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now);fileName = fileName.Trim();string ext = Path.GetExtension(fileName);if (ext.ToLower() == ".xls" || ext.ToLower() == ".xlsx")fileName = fileName.Replace(ext, string.Empty);HttpResponse httpResponse = HttpContext.Current.Response;httpResponse.Clear();httpResponse.Buffer = true;httpResponse.Charset = Encoding.UTF8.BodyName;httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");httpResponse.ContentEncoding = Encoding.UTF8;httpResponse.ContentType = "application/vnd.ms-excel; charset=UTF-8";book.Write(httpResponse.OutputStream);httpResponse.End();}

?

基于.xls模板生成Excel文件有時(shí)間再看

代碼下載:https://yunpan.cn/cRBVnTCSchz7k (提取碼:779e)?

+ 關(guān)注

轉(zhuǎn)載于:https://www.cnblogs.com/lacey/p/6634004.html

總結(jié)

以上是生活随笔為你收集整理的.NET NPOI导出Excel详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。