C# 使用 NPOI 处理Excel导入单元格内容是公式问题

您所在的位置:网站首页 表格公式不自动刷新怎么办 C# 使用 NPOI 处理Excel导入单元格内容是公式问题

C# 使用 NPOI 处理Excel导入单元格内容是公式问题

2024-07-09 23:20| 来源: 网络整理| 查看: 265

C# 使用 NPOI 处理Excel导入单元格内容是公式问题

引言:今天在处理业务的时候,碰到导入Excel数据不成功的问题,那么就在这里做下笔记吧。 首先,我们有以下的数据。整块业务逻辑的代码在最后会贴上! 1.数值公式示例: 可以看出L3的内容值是80,公式J3*0.2。 在这里插入图片描述 我们需要使用判断ICell对象的CellType枚举类型,当=CellType.Formula,则代表单元格是公式类型的。则直接用cell.NumericCellValue取值即可。 在这里插入图片描述 对于Excel来讲,除了数值的一些公式以外,还会有日期公式,不过最后都是进入到CellType.Formula判断中,需要另外根据转换出来的数值进行转换成日期类型即可。 2.日期公式示例: G4的内容我使用的是TODAY公式获取当前日期。 在这里插入图片描述 同样的,我们需要使用判断ICell对象的CellType枚举类型,当=CellType.Formula,则代表单元格是公式类型的。则直接用cell.NumericCellValue取值,需要根据取出来的数值进行转换成日期类型即可。 在这里插入图片描述 数值转换成日期的处理代码:

long isNumberDateTime = 0; if (Int64.TryParse(cellVal.ToString(), out isNumberDateTime)) { //数值型,则转换成日期 DateTime d = DateTime.FromOADate(double.Parse(cellVal.ToString())); }

转换后的结果: 在这里插入图片描述 3.整块业务逻辑的代码:

#region Excel /// /// Excel文件转换成DataTable /// /// 文件路径 /// 是否使用新列名,默认:是 /// 删除上面的行索引(由于有些Excel导入时上面会存在多余行) /// 返回列名Cols0,Cols1,Cols2···以此类推 public DataTable ExcelToTable(string filePath, bool isUseNewColumnName = true, int deleteEndRowIndex = 0) { DataTable dataTable = new DataTable(); string a = Path.GetExtension(filePath).ToLower(); DataTable result; using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook; if (a == ".xlsx") { workbook = new XSSFWorkbook(fileStream); } else { if (a == ".xls") { workbook = new HSSFWorkbook(fileStream); } else { workbook = null; throw new Exception("请导入.xlsx或.xls格式的文档"); } } if (workbook == null) { result = null; return result; } ISheet sheetAt = workbook.GetSheetAt(0); if (deleteEndRowIndex != 0) { for (int i = deleteEndRowIndex; i >= 1; i--) { sheetAt.ShiftRows(i, i + 1, -1); } } IRow row = sheetAt.GetRow(sheetAt.FirstRowNum); List list = new List(); for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3