當前位置:
首頁 >
.NET NPOI导出Excel详解
發布時間:2023/11/29
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
.NET NPOI导出Excel详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.cnblogs.com/yinrq/p/5590970.html
?
?
.NET NPOI導出Excel詳解
NPOI,顧名思義,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java寫成的庫,能夠幫助開發者在沒有安裝微軟Office的情況下讀寫Office的文件。
支持的文件格式包括xls, doc, ppt等。
官方網站:http://npoi.codeplex.com/
nuget直接獲取使用
一、NPOI生成Excel
//創建工作薄var workbook = new HSSFWorkbook();//創建表var table = workbook.CreateSheet("joye.net");//模擬20行20列數據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文件,如沒有則創建,如存在則在創建是不要打開該文件using (var fs = File.OpenWrite(@"c:/joye.net.xls")){workbook.Write(fs); //向打開的這個xls文件中寫入mySheet表并保存。Console.WriteLine("生成成功");}二、NPOI讀取Excel
using (var fs = File.OpenRead(@"c:/joye.net.xls")) {//把xls文件中的數據寫入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++){ //讀取當前行數據var row = sheet.GetRow(j);if (row != null){for (var k = 0; k <= row.LastCellNum; k++){ //當前表格var cell = row.GetCell(k);if (cell != null){Console.Write(cell.ToString() + " ");}}}Console.WriteLine();}}}讀出的結果
?三、簡單學習
?學習代碼 ?代碼調用四、NPOI導出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導出Excel超過65536會報異常,原來是由于NPOI這個動態庫導致的,然后看了下版本,發現是1.2.5。然后百度了下,發現這個版本的NPOI只支持office2003,二office2003最多支持65536行
解決方式:
1、只是在插入數據的時候,加個判斷,如果數據條數大于65536時,就在創建一個sheet
//65536判斷處理public static HSSFWorkbook BuildWorkbook(DataTable dt){var book = new HSSFWorkbook();ISheet sheet1 = book.CreateSheet("Sheet1");ISheet sheet2 = book.CreateSheet("Sheet2");//填充數據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開發中導出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文件有時間再看
代碼下載:https://yunpan.cn/cRBVnTCSchz7k (提取碼:779e)?
+ 關注
轉載于:https://www.cnblogs.com/lacey/p/6634004.html
總結
以上是生活随笔為你收集整理的.NET NPOI导出Excel详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到一堆小蛇预示着什么意思
- 下一篇: ASP.NET Core 源码学习之 L