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;    

 }

 

 

转载于:https://www.cnblogs.com/Charles-xu/p/4745476.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值