ASP.NET MVC NPOI匯入Excel
阿新 • • 發佈:2018-12-31
用NPOI第三方庫匯入匯出Excel的思路:
先把你要匯入的Excel上傳到服務端,然後把Excel檔案當做資料庫讀取資料,再儲存到資料庫或者其他操作
新建一個專案,下方點選MVC複選框
新建一個叫ExcelController控制器
新增Index檢視,在裡面寫匯入檔案和表單,注意這裡的<input type='file' id='file'>的id,要跟提交到控制器方法的引數欄位要一致。
安裝NPOI 第三方庫
我們先把檔案上傳到Files資料夾,在Index視圖裡面我是把檔案提交到Excel控制器裡面的Import方法,引數HttpPostedFileBase 型別是用來接收檔案資料,引數名要跟檢視的id一致
看到Files資料夾已經有我們剛才上傳的檔案,說明上傳檔案這部分已經成功了。接下來的操作就是用NPOI第三庫對Excel進行操作
static public class ImportExcel { public static DataTable GetExcelDataTable(string filePath) { IWorkbook Workbook; DataTable table = new DataTable(); try { using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { //XSSFWorkbook 適用XLSX格式,HSSFWorkbook 適用XLS格式 string fileExt = Path.GetExtension(filePath).ToLower(); if (fileExt == ".xls") { Workbook = new HSSFWorkbook(fileStream); } else if (fileExt == ".xlsx") { Workbook = new XSSFWorkbook(fileStream); } else { Workbook = null; } } } catch (Exception ex) { throw ex; } //定位在第一個sheet ISheet sheet = Workbook.GetSheetAt(0); //第一行為標題行 IRow headerRow = sheet.GetRow(0); int cellCount = headerRow.LastCellNum; int rowCount = sheet.LastRowNum; //迴圈新增標題列 for (int i = headerRow.FirstCellNum; i < cellCount; i++) { DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); table.Columns.Add(column); } //資料 for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++) { IRow row = sheet.GetRow(i); DataRow dataRow = table.NewRow(); if (row != null) { for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) { dataRow[j] = GetCellValue(row.GetCell(j)); } } } table.Rows.Add(dataRow); } return table; } private static string GetCellValue(ICell cell) { if (cell == null) { return string.Empty; } switch (cell.CellType) { case CellType.Blank: return string.Empty; case CellType.Boolean: return cell.BooleanCellValue.ToString(); case CellType.Error: return cell.ErrorCellValue.ToString(); case CellType.Numeric: case CellType.Unknown: default: return cell.ToString(); case CellType.String: return cell.StringCellValue; case CellType.Formula: try { HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook); e.EvaluateInCell(cell); return cell.ToString(); } catch { return cell.NumericCellValue.ToString(); } } } }
返回的是一個DataTable的資料集,想存進資料庫還是進行邏輯處理,自行操作咯。