ASP.NET MVC - NPOI读取Excel

引入:

using  System ;
using  System . Data ;
using  System . IO ;
using  NPOI . SS . UserModel ;
using  NPOI . XSSF . UserModel ;
using  NPOI . HSSF . UserModel ;

namespace  NPOIOprateExcel
{
     public  class  ExcelUtility
     {
         ///   < summary >
         ///  将excel导入到datatable
         ///   </ summary >
         ///   < param  name = " filePath " > excel路径 </ param >
         ///   < param  name = " isColumnName " > 第一行是否是列名 </ param >
         ///   < returns > 返回datatable </ returns >
         public  static  DataTable  ExcelToDataTable ( string  filePath ,  bool  isColumnName )
         {
             DataTable  dataTable  =  null ;
             FileStream  fs  =  null ;
             DataColumn  column  =  null ;
             DataRow  dataRow  =  null ;
             IWorkbook  workbook  =  null ;
             ISheet  sheet  =  null ;
             IRow  row  =  null ;
             ICell  cell  =  null ;
             int  startRow  =  0 ;
             try
             {
                 using  ( fs  =  File . OpenRead ( filePath ))
                 {
                     // 2007版本
                     if  ( filePath . IndexOf ( ".xlsx" )  >  0 )
                         workbook  =  new  XSSFWorkbook ( fs );
                     // 2003版本
                     else  if  ( filePath . IndexOf ( ".xls" )  >  0 )
                         workbook  =  new  HSSFWorkbook ( fs );

                     if  ( workbook  !=  null )
                     {
                         sheet  =  workbook . GetSheetAt ( 0 ); //读取第一个sheet,也能循环读取每个sheet
                         dataTable  =  new  DataTable ();
                         if  ( sheet  !=  null )
                         {
                             int  rowCount  =  sheet . LastRowNum + 1 ; //+1 包括列名的行,总行数
                             if  ( rowCount  >  0 )
                             {
                                 IRow  firstRow  =  sheet . GetRow ( 0 ); //第一行
                                 int  cellCount  =  firstRow . LastCellNum ; //列数

                                 //构建datatable的列
                                 if  ( isColumnName )
                                 {
                                     startRow  =  0 ; //要读取列名则=0 否则=1
                                     for  ( int  i  =  firstRow . FirstCellNum ;  i  <  cellCount ;  ++ i )
                                     {
                                         cell  =  firstRow . GetCell ( i );
                                         if  ( cell  !=  null )
                                         {
                                             if  ( cell . StringCellValue  !=  null )
                                             {
                                                 column  =  new  DataColumn ( cell . StringCellValue );
                                                 dataTable . Columns . Add ( column );
                                             }
                                         }
                                     }
                                 }
                                 else
                                 {
                                     for  ( int  i  =  firstRow . FirstCellNum ;  i  <  cellCount ;  ++ i )
                                     {
                                         column  =  new  DataColumn ( "column"  +  ( i  +  1 ));
                                         dataTable . Columns . Add ( column );
                                     }
                                 }

                                 //填充行
                                 for  ( int  i  =  startRow ;  i  <  rowCount ;  ++ i )  //要读取列名则i<rowCount 否则i <= rowCount
                                 {
                                     row  =  sheet . GetRow ( i );
                                     if  ( row  ==  null )  continue ;

                                     dataRow  =  dataTable . NewRow ();
                                     for  ( int  j  =  row . FirstCellNum ;  j  <  cellCount ;  ++ j )
                                     {
                                         cell  =  row . GetCell ( j );
                                         if  ( cell  ==  null )
                                         {
                                             dataRow [ j ]  =  "" ;
                                         }
                                         else
                                         {
                                             //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
                                             switch  ( cell . CellType )
                                             {
                                                 case  CellType . Blank :
                                                     dataRow [ j ]  =  "" ;
                                                     break ;
                                                 case  CellType . Numeric :
                                                     short  format  =  cell . CellStyle . DataFormat ;
                                                     //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
                                                     if  ( format  ==  14  ||  format  ==  31  ||  format  ==  57  ||  format  ==  58 )
                                                         dataRow [ j ]  =  cell . DateCellValue ;
                                                     else
                                                         dataRow [ j ]  =  cell . NumericCellValue ;
                                                     break ;
                                                 case  CellType . String :
                                                     dataRow [ j ]  =  cell . StringCellValue ;
                                                     break ;
                                             }
                                         }
                                     }
                                     dataTable . Rows . Add ( dataRow );
                                 }
                             }
                         }
                     }
                 }
                 return  dataTable ;
             }
             catch  ( Exception )
             {
                 if  ( fs  !=  null )
                 {
                     fs . Close ();
                 }
                 return  null ;
             }
         }
     }
}

转载于:https://www.cnblogs.com/myrocknroll/p/8118290.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值