C# 使用NPOI讀取Excel表格中第一個sheet中內容存在DataTable中
阿新 • • 發佈:2019-02-19
很久沒寫文章了,主要是從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;
}