1. 程式人生 > >ASP.NET MVC NPOI匯入Excel

ASP.NET MVC NPOI匯入Excel

用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的資料集,想存進資料庫還是進行邏輯處理,自行操作咯。