zoukankan      html  css  js  c++  java
  • 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;    

     }

     

     

  • 相关阅读:
    Spring -- 自定义转换器
    Spring乱码问题解决方案
    Spring 声明式事务
    Spring -- IOC
    Spring--入门
    mybatis 二级缓存
    Mybatis 缓存失效的几种情况
    MyBatis深入浅出--入门
    【RF库Collections测试】Get From Dictionary
    【RF库Collections测试】Get Dictionary Values
  • 原文地址:https://www.cnblogs.com/Charles-xu/p/4745476.html
Copyright © 2011-2022 走看看