1. 程式人生 > >C# 使用NPOI讀取Excel表格中第一個sheet中內容存在DataTable中

C# 使用NPOI讀取Excel表格中第一個sheet中內容存在DataTable中

很久沒寫文章了,主要是從java轉到c#,經歷坎坷一言難盡呀,但最重的一點,就是變懶了。希望你們不要學小編。。。咳咳。。好乾貨開始。

二、前端用form表單提交即可,js或jq觸發form提交即可

 <form class="form-horizontal" id="uploadForm" enctype="multipart/form-data" action="寫你自己的路徑" >
 <input type="file" id="fileUpload" name="fileUpload">
 </form>

三、後臺程式碼

using NPOI.SS.UserModel;        //NPOI
using NPOI.HSSF.Util; //NPOI using NPOI.HSSF.UserModel; //NPOI using NPOI.XSSF.UserModel; //NPOI
 /// <summary>
        ///將Excel中第一個sheet中內容匯入到DataTable中
        /// 區分xsl和xslx分別處理
        /// </summary>
        /// <param name="filePath">Excel檔案路徑,含檔案全名</param>
        /// <param name="sheetName">
此Excel中sheet名</param>
/// <returns></returns> public DataTable ReadExcelToDataTable() { HttpPostedFileBase File = Request.Files["fileUpload"];//<input type="file" name="fileUpload">中name對應獲取Excel檔案 Stream streamfile = File.InputStream;//將檔案轉換成流
DataTable dt = new DataTable(); IWorkbook workbook = null;//建立一個工作薄來裝Excel表 if (Path.GetExtension(File.FileName).ToLower() == ".xls".ToLower()) //filePath {//.xls #region .xls檔案處理:HSSFWorkbook workbook = new HSSFWorkbook(streamfile); ISheet sheet = workbook.GetSheetAt(0); //獲取第一個工作表(sheet) System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); HSSFRow headerRow = (HSSFRow)sheet.GetRow(0); //一行最後一個方格的編號 即總的列數 for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++) { //SET EVERY COLUMN NAME HSSFCell cell = (HSSFCell)headerRow.GetCell(j); dt.Columns.Add(cell.ToString()); } while (rows.MoveNext()) { IRow row = (HSSFRow)rows.Current; DataRow dr = dt.NewRow(); if (row.RowNum == 0) continue;//The firt row is title,no need import for (int i = 0; i < row.LastCellNum; i++) { if (i >= dt.Columns.Count)//cell count>column count,then break //每條記錄的單元格數量不能大於表格欄位數量 20140213 { break; } ICell cell = row.GetCell(i); if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一個cell為空,break { break; } if (cell == null) { dr[i] = null; } else { //dr[i] = cell.ToString(); if (cell.CellType == CellType.NUMERIC && DateUtil.IsCellDateFormatted(cell)) { dr[i] = cell.DateCellValue.ToString("yyyy-MM-dd hh:mm:ss"); // //如果內容是時間格式轉成這種格式 } else { dr[i] = row.GetCell(i).ToString(); } } } dt.Rows.Add(dr); } #endregion } else {//.xlsx #region .xlsx檔案處理:XSSFWorkbook workbook = new XSSFWorkbook(streamfile); ISheet sheet = workbook.GetSheetAt(0); System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); XSSFRow headerRow = (XSSFRow)sheet.GetRow(0); //一行最後一個方格的編號 即總的列數 for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++) { //SET EVERY COLUMN NAME XSSFCell cell = (XSSFCell)headerRow.GetCell(j); dt.Columns.Add(cell.ToString()); } while (rows.MoveNext()) { IRow row = (XSSFRow)rows.Current; DataRow dr = dt.NewRow(); if (row.RowNum == 0) continue;//The firt row is title,no need import for (int i = 0; i < row.LastCellNum; i++) { if (i >= dt.Columns.Count)//cell count>column count,then break //每條記錄的單元格數量不能大於表格欄位數量 20140213 { break; } ICell cell = row.GetCell(i); if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一個cell為空,break { break; } if (cell == null) { dr[i] = null; } else { //dr[i] = cell.ToString(); if (cell.CellType == CellType.NUMERIC && DateUtil.IsCellDateFormatted(cell)) { dr[i] = cell.DateCellValue.ToString("yyyy-MM-dd hh:mm:ss"); //如果內容是時間格式轉成這種格式 } else { dr[i] = row.GetCell(i).ToString(); } } } dt.Rows.Add(dr); } #endregion } return dt; }