第一種:傳統方法,採用OleDB讀取EXCEL文件,服務器
優勢,寫法簡單,老式。缺點 :服務器必須有安裝此組建,並且版本必須兼容,不然讀取報錯,不推薦使用。多線程
第二種:經過引用的com組件:Microsoft.Office.Interop.Excel.dll讀取Excel文件ide
開啓一個Excel進程,逐行逐cell的處理excel文檔,大數據
缺點:數據量大時比較慢,並且影響很明顯,及時開啓多線程也不理想,大數據慎用。網站
使用完後須要kill掉excel進程。this
第三種:NPOIspa
先去官網:http://npoi.codeplex.com/下載須要引入dll(能夠選擇.net2.0或者.net4.0的dll),而後在網站中添加引用。.net
NPOI 是 POI 項目的 .NET 版本。POI是一個開源的Java讀寫Excel、WORD等微軟OLE2組件文檔的項目。線程
使用 NPOI 你就能夠在沒有安裝 Office 或者相應環境的機器上對 WORD/EXCEL 文檔進行讀寫。excel
NPOI採用的是Apache 2.0許可證(poi也是採用這個許可證),這意味着它能夠被用於任何商業或非商業項目,你不用擔憂由於使用它而必須開放你本身的源代碼,因此它對於不少從事業務系統開發的公司來講絕對是很不錯的選擇。
固然做爲一個開源許可證,確定也是有一些義務的,例如若是你在系統中使用NPOI,你必須保留NPOI中的全部聲明信息。對於源代碼的任何修改,必須作出明確的標識。
/// <summary>
/// 讀取Excel文件到table中
/// </summary>
/// <param name="filePath">excel文件路徑</param>
/// <returns></returns>
private DataTable ReadExcel(string fileName)
{
DataTable dt = new DataTable();
string filePath = this.Server.MapPath("/Temp/" + fileName);
dt = ImportExcelFile(filePath);
//文件是否存在
if (System.IO.File.Exists(filePath))
{
}
return dt;
}
private DataTable ImportExcelFile(string filePath)
{
HSSFWorkbook hssfworkbook;
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
}
catch (Exception e)
{
throw e;
}
ISheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
DataTable dt = new DataTable();
rows.MoveNext();
HSSFRow row = (HSSFRow)rows.Current;
for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
{
//將第一列做爲列表頭
dt.Columns.Add(row.GetCell(j).ToString());
}
while (rows.MoveNext())
{
row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();
for (int i = 0; i < row.LastCellNum; i++)
{
NPOI.SS.UserModel.ICell cell = row.GetCell(i);
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();
}
}
dt.Rows.Add(dr);
}
return dt;
}