第一种:传统方法,采用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;
}