asp.net 读取excel文件的一些方法,NPOI方法
第一种:传统方法,采用OleDB读取EXCEL文件,
优点,写法简单,老式。缺点 :服务器必须有安装此组建,而且版本必须兼容,否则读取报错,不推荐使用。
- private DataSet GetConnect_DataSet2(string fileName)
- {
- DataSet myDataSet = new DataSet();
- //创建一个数据链接
- string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + fileName + ";Extended Properties=Excel 8.0";
- OleDbConnection myConn = new OleDbConnection(strCon);
- string strCom = " SELECT * FROM [Sheet1$] ";
- //try
- //{
- myConn.Open();
- //打开数据链接,得到一个数据集
- OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
- //创建一个 DataSet对象
- myDataSet = new DataSet();
- //得到自己的DataSet对象
- myCommand.Fill(myDataSet, "CodeTable");
- //关闭此数据链接
- myConn.Close();
- //}
- //catch (Exception ex)
- //{
- //}
- return myDataSet;
- }
第二种:通过引用的com组件:Microsoft.Office.Interop.Excel.dll读取Excel文件
开启一个Excel进程,逐行逐cell的处理excel文档,
缺点:数据量大时比较慢,而且影响很明显,及时开启多线程也不理想,大数据慎用。
使用完后需要kill掉excel进程。
第三种:NPOI
先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。
NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/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;
}