Csharp/C#教程:C#使用NPOI导入Excel的方法详解分享

本文实例讲述了C#使用NPOI导入Excel的方法。分享给大家供大家参考,具体如下:

NPOI是由国人开发的一个进行excel操作的第三方库。百度百科介绍如下:NPOI

本文主要介绍如何使用NPOI将Excel数据读取。

首先引入程序集:

usingSystem.IO; usingSystem.Reflection; usingNPOI.HSSF.UserModel; usingNPOI.SS.UserModel; usingSystem.Web;

然后定位到文件位置:

stringpath="~/上传文件/custompersonsalary/"+id+"/"+id+".xls"; stringfilePath=Server.MapPath(path); FileStreamfs=newFileStream(filePath,FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite)//打开.xls文件

接下来,将xls文件中的数据写入workbook中:

HSSFWorkbookwk=newHSSFWorkbook(fs);//把xls文件中的数据写入wk中

wk.NumberOfSheets是xls文件中总共的表的个数。

wk.GetSheetAt(i)是获取第i个表的数据。

通过循环:

for(inti=0;i<wk.NumberOfSheets;i++)//NumberOfSheets是xls文件中总共的表数

将每个表的数据单独存放在ISheet对象中:

ISheetsheet=wk.GetSheetAt(i);//读取当前表数据

这样某张表的数据就暂存在sheet对象中了。
接下来,我们可以通过sheet.LastRowNum来获取行数,sheet.GetRow(j)来获取第j行数据:

for(j=1;j<=sheet.LastRowNum;j++)//LastRowNum是当前表的总行数 { IRowrow=sheet.GetRow(j);//读取当前行数据

每一行的数据又存在IRow对象中。

我们可以通过row.LastCellNum来获取列数,row.Cells[i]来获取第i列数据。

row.Cells[2].ToString();

这里需要注意一点的就是,如果单元格中数据为公式计算而出的话,row.Cells[i]会返回公式,需要改为:

row.Cells[2].NumericCellValue

就可以返回计算结果了。

最后将我在项目中用到的一段导入Excel数据赋予实体的示例如下:

///<summary> ///导入操作 ///</summary> ///@author:刘放 ///@date:2015/10/17 ///<paramname="id">主表id</param> ///<returns>如果成功,返回ok,如果失败,返回不满足格式的姓名</returns> publicstringInDB(stringid) { intj=0; StringBuildersbr=newStringBuilder(); stringpath="~/上传文件/custompersonsalary/"+id+"/"+id+".xls"; stringfilePath=Server.MapPath(path); using(FileStreamfs=newFileStream(filePath,FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite))//打开123.xls文件 { //定义一个工资详细集合 List<HR_StaffWage_Details>staffWageList=newList<HR_StaffWage_Details>(); try { HSSFWorkbookwk=newHSSFWorkbook(fs);//把xls文件中的数据写入wk中 for(inti=0;i<wk.NumberOfSheets;i++)//NumberOfSheets是xls文件中总共的表数 { ISheetsheet=wk.GetSheetAt(i);//读取当前表数据 for(j=1;j<=sheet.LastRowNum;j++)//LastRowNum是当前表的总行数 { IRowrow=sheet.GetRow(j);//读取当前行数据 if(row!=null) { //for(intk=0;k<=row.LastCellNum;k++)//LastCellNum是当前行的总列数 //{ //如果某一行的员工姓名,部门,岗位和员工信息表不对应,退出。 SysEntitiesdb=newSysEntities(); if(CommonHelp.IsInHR_StaffInfo(db,row.Cells[2].ToString(),row.Cells[0].ToString(),row.Cells[1].ToString())==false)//姓名,部门,岗位 { //返回免费精选名字大全以便提示 returnrow.Cells[2].ToString(); } //如果符合要求,这将值放入集合中。 HR_StaffWage_Detailshr_sw=newHR_StaffWage_Details(); hr_sw.Id=Result.GetNewIdForNum("HR_StaffWage_Details");//生成编号 hr_sw.SW_D_Name=row.Cells[2].ToString();//姓名 hr_sw.SW_D_Department=row.Cells[0].ToString();//部门 hr_sw.SW_D_Position=row.Cells[1].ToString();//职位 hr_sw.SW_D_ManHour=row.Cells[3].ToString()!=""?Convert.ToDouble(row.Cells[3].ToString()):0;//工数 hr_sw.SW_D_PostWage=row.Cells[4].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[4].NumericCellValue.ToString()):0;//基本工资 hr_sw.SW_D_RealPostWage=row.Cells[5].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[5].NumericCellValue.ToString()):0;//岗位工资 hr_sw.SW_D_PieceWage=row.Cells[6].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[6].NumericCellValue.ToString()):0;//计件工资 hr_sw.SW_D_OvertimePay=row.Cells[7].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[7].NumericCellValue.ToString()):0;//加班工资 hr_sw.SW_D_YearWage=row.Cells[8].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[8].NumericCellValue.ToString()):0;//年假工资 hr_sw.SW_D_MiddleShift=row.Cells[9].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[9].NumericCellValue.ToString()):0;//中班 hr_sw.SW_D_NightShift=row.Cells[10].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[10].NumericCellValue.ToString()):0;//夜班 hr_sw.SW_D_MedicalAid=row.Cells[11].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[11].NumericCellValue.ToString()):0;//医补 hr_sw.SW_D_DustFee=row.Cells[12].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[12].NumericCellValue.ToString()):0;//防尘费 hr_sw.SW_D_Other=row.Cells[13].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[13].NumericCellValue.ToString()):0;//其他 hr_sw.SW_D_Allowance=row.Cells[14].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[14].NumericCellValue.ToString()):0;//津贴 hr_sw.SW_D_Heat=row.Cells[15].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[15].NumericCellValue.ToString()):0;//防暑费 hr_sw.SW_D_Wash=row.Cells[16].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[16].NumericCellValue.ToString()):0;//澡费 hr_sw.SW_D_Subsidy=row.Cells[17].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[17].NumericCellValue.ToString()):0;//补助 hr_sw.SW_D_Bonus=row.Cells[18].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[18].NumericCellValue.ToString()):0;//奖金 hr_sw.SW_D_Fine=row.Cells[19].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[19].NumericCellValue.ToString()):0;//罚款 hr_sw.SW_D_Insurance=row.Cells[20].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[20].NumericCellValue.ToString()):0;//养老保险 hr_sw.SW_D_MedicalInsurance=row.Cells[21].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[21].NumericCellValue.ToString()):0;//医疗保险 hr_sw.SW_D_Lunch=row.Cells[22].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[22].NumericCellValue.ToString()):0;//餐费 hr_sw.SW_D_DeLunch=row.Cells[23].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[23].NumericCellValue.ToString()):0;//扣餐费 hr_sw.SW_D_De=row.Cells[24].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[24].NumericCellValue.ToString()):0;//扣项 hr_sw.SW_D_Week=row.Cells[25].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[25].NumericCellValue.ToString()):0;//星期 hr_sw.SW_D_Duplex=row.Cells[26].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[26].NumericCellValue.ToString()):0;//双工 hr_sw.SW_D_ShouldWage=row.Cells[27].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[27].NumericCellValue.ToString()):0;//应发金额 hr_sw.SW_D_IncomeTax=row.Cells[28].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[28].NumericCellValue.ToString()):0;//所得税 hr_sw.SW_D_FinalWage=row.Cells[29].NumericCellValue.ToString()!=""?Convert.ToDouble(row.Cells[29].NumericCellValue.ToString()):0;//实发金额 hr_sw.SW_D_Remark=row.Cells[30].ToString();//备注 hr_sw.SW_Id=id;//外键 hr_sw.SW_D_WageType=null;//工资类型 staffWageList.Add(hr_sw); } } } } catch(Exceptione){ //错误定位 intk=j; } //再将list转入数据库 doubleallFinalWage=0; foreach(HR_StaffWage_DetailsiteminstaffWageList) { SysEntitiesdb=newSysEntities(); db.AddToHR_StaffWage_Details(item); db.SaveChanges(); allFinalWage+=Convert.ToDouble(item.SW_D_FinalWage); } //将总计赋予主表 SysEntitiesdbt=newSysEntities(); HR_StaffWagesw=CommonHelp.GetHR_StaffWageById(dbt,id); sw.SW_WageSum=Math.Round(allFinalWage,2); dbt.SaveChanges(); } sbr.ToString(); return"OK"; }

最后需要注意一点的就是,Excel中即使某些单元格内容为空,但是其依旧占据了一个位置,所以在操作的时候需要格外注意。

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#操作Excel技巧上述就是C#学习教程:C#使用NPOI导入Excel的方法详解分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/907793.html

(0)
上一篇 2021年10月25日
下一篇 2021年10月25日

精彩推荐