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()
{
Dictionaryt=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;i0)
{
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的资料请关注毛票票其它相关文章!