c# 根据NPOI 读取一个excel 文件的多个Sheet
大家都知道NPOI组件可以在你本地没有安装office的情况下来读取,创建excel文件。但是大家一般都是只默认读取一个excel文件的第一个sheet。那么如果要读取一个excel的所有sheet要怎么做呢?
下面就来告诉大家如何操作NPOI读取excel的所有sheet。
首先我们先讲解操作excel单独创建的一个类,我命名为 EXECLHELP
usingNPOI.HSSF.UserModel; usingNPOI.SS.UserModel; usingNPOI.XSSF.UserModel; usingSystem; usingSystem.Collections.Generic; usingSystem.Data; usingSystem.IO; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; publicclassExcelHelper:IDisposable { privatestringfileName=null;//文件名 privateIWorkbookworkbook=null; privateFileStreamfs=null; privatebooldisposed; publicExcelHelper(stringfileName) { this.fileName=fileName; disposed=false; } //////将DataTable数据导入到excel中 /// ///要导入的数据 /// DataTable的列名是否要导入 /// 要导入的excel的sheet的名称 /// 导入数据行数(包含列名那一行) publicintDataTableToExcel(DataTabledata,stringsheetName,boolisColumnWritten) { inti=0; intj=0; intcount=0; ISheetsheet=null; fs=newFileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite); if(fileName.IndexOf(".xlsx")>0)//2007版本 workbook=newXSSFWorkbook(); elseif(fileName.IndexOf(".xls")>0)//2003版本 workbook=newHSSFWorkbook(); try { if(workbook!=null) { sheet=workbook.CreateSheet(sheetName); } else { return-1; } if(isColumnWritten==true)//写入DataTable的列名 { IRowrow=sheet.CreateRow(0); for(j=0;j///将excel中的数据导入到DataTable中 /// /// excel工作薄sheet的名称 /// 第一行是否是DataTable的列名 /// 返回的DataTable /// publicDictionaryReturnSheetList() { Dictionary t=newDictionary (); ISheetsheet=null; DataTabledata=newDataTable(); intstartRow=0; try { fs=newFileStream(fileName,FileMode.Open,FileAccess.Read); if(fileName.IndexOf(".xlsx")>0)//2007版本 workbook=newXSSFWorkbook(fs); elseif(fileName.IndexOf(".xls")>0)//2003版本 workbook=newHSSFWorkbook(fs); intcount=workbook.NumberOfSheets;//获取所有SheetName for(inti=0;i 0) { t.Add(i,workbook.GetSheetAt(i).SheetName); } } returnt; } catch(Exceptionex) { thrownewException(ex.Message); } }
///indexexcel的第几个sheet publicDataTableExcelToDataTable(intindex) { ISheetsheet=null; DataTabledata=newDataTable(); intstartRow=0; try { fs=newFileStream(fileName,FileMode.Open,FileAccess.Read); if(fileName.IndexOf(".xlsx")>0)//2007版本 workbook=newXSSFWorkbook(fs); elseif(fileName.IndexOf(".xls")>0)//2003版本 workbook=newHSSFWorkbook(fs); //intcoutnts=workbook.NumberOfSheets; sheet=workbook.GetSheetAt(index); //stringnames=sheet.SheetName; if(sheet!=null) { IRowfirstRow=sheet.GetRow(0); intcellCount=firstRow.LastCellNum;//一行最后一个cell的编号即总的列数 for(inti=firstRow.FirstCellNum;i
DataTableToExcel这个方法是讲数据导出为excel,参数在代码里面都写了注释,可以直接套用。ExcelToDataTable这个方法主要是将excel数据导入到databtable里面同理参数也在注释里面。主要讲一下ReturnSheetList方法在读取之前我们是需要判断导入的excel版本是高版本还是低版本,这是因为npoi提供高低版本的操作类是不一样的大于03小于07版本提供的是HSSFWorkbook,小于07版本提供的是XSSFWorkbook。然后workbook.NumberOfSheets这个主要是获取一个excel文件中有多少个sheet,我们根据循环遍历读取sheet然后将sheetname的名字和对应的index传到一个数据字典中保存。于是这个数据字典就存在了你导入的excel文件所有的有内容的sheet和对应的index。搭配上ExcelToDataTable使用就可以达到切换读取一个excel的不同sheet的目的。
以上就是c#根据NPOI读取一个excel文件的多个Sheet的详细内容,更多关于c#读取excel的sheet的资料请关注毛票票其它相关文章!