布瑞泽的童话 通过本文主要向大家介绍了马桶c的个人空间,欲情 c max,维生素c,奔驰c200,85度c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文实例讲述了C#使用NPOI导入Excel的方法。分享给大家供大家参考,具体如下:
NPOI是由国人开发的一个进行excel操作的第三方库。百度百科介绍如下:NPOI
本文主要介绍如何使用NPOI将Excel数据读取。
首先引入程序集:
using System.IO; using System.Reflection; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.Web;</div>
然后定位到文件位置:
string path = "~/上传文件/custompersonsalary/" + id + "/"+id+".xls"; string filePath = Server.MapPath(path); FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite) //打开.xls文件</div>
接下来,将xls文件中的数据写入workbook中:
HSSFWorkbook wk = new HSSFWorkbook(fs); //把xls文件中的数据写入wk中</div>
wk.NumberOfSheets
是xls文件中总共的表的个数。
wk.GetSheetAt(i)
是获取第i个表的数据。
通过循环:
for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是xls文件中总共的表数</div>
将每个表的数据单独存放在ISheet
对象中:
ISheet sheet = wk.GetSheetAt(i); //读取当前表数据</div>
这样某张表的数据就暂存在sheet
对象中了。
接下来,我们可以通过sheet.LastRowNum
来获取行数,sheet.GetRow(j)
来获取第j行数据:
for (j = 1; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数 { IRow row = sheet.GetRow(j); //读取当前行数据</div>
每一行的数据又存在IRow对象中。
我们可以通过row.LastCellNum
来获取列数,row.Cells[i]
来获取第i列数据。
row.Cells[2].ToString();</div>
这里需要注意一点的就是,如果单元格中数据为公式计算而出的话,row.Cells[i]
会返回公式,需要改为:
row.Cells[2].NumericCellValue</div>
就可以返回计算结果了。
最后将我在项目中用到的一段导入Excel数据赋予实体的示例如下:
/// <summary> /// 导入操作 /// </summary> /// @author: 刘放 /// @date: 2015/10/17 /// <param name="id">主表id</param> /// <returns>如果成功,返回ok,如果失败,返回不满足格式的姓名</returns> public string InDB(string id) { int j=0; StringBuilder sbr = new StringBuilder(); string path = "~/上传文件/custompersonsalary/" + id + "/"+id+".xls"; string filePath = Server.MapPath(path); using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) //打开123.xls文件 { //定义一个工资详细集合 List<HR_StaffWage_Details> staffWageList = new List<HR_StaffWage_Details>(); try { HSSFWorkbook wk = new HSSFWorkbook(fs); //把xls文件中的数据写入wk中 for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是xls文件中总共的表数 { ISheet sheet = wk.GetSheetAt(i); //读取当前表数据 for (j = 1; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数 { IRow row = sheet.GetRow(j); //读取当前行数据 if (row != null) { //for (int k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数 //{ //如果某一行的员工姓名,部门,岗位和员工信息表不对应,退出。 SysEntities db = new SysEntities(); if (CommonHelp.IsInHR_StaffInfo(db, row.Cells[2].ToString(), row.Cells[0].ToString(), row.Cells[1].ToString()) == false)//姓名,部门,岗位 { //返回名字以便提示 return row.Cells[2].ToString(); } //如果符合要求,这将值放入集合中。 HR_StaffWage_Details hr_sw = new HR_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].NumericCe