利用NPOI导入Excel时单元格类型CellType为公式Formula时的处理方式

利用NPOI导入Excel时单元格类型CellType为公式Formula时的处理方式

利用递归进行重复判断处理

代码
Action<CellType> action = null;
action = ct =>
{
	switch (ct)
    {
    	case CellType.Numeric:
        	if (DateUtil.IsCellDateFormatted(row.GetCell(j)))
        	{
        		dataRow[j] = row.GetCell(j).DateCellValue.ToString("yyyy-MM-dd");
        	}
        	else
        	{
        		dataRow[j] = row.GetCell(j).NumericCellValue;
	        }
        	break;
        case CellType.String:
        	dataRow[j] = row.GetCell(j).StringCellValue.Trim();
            break;
        case CellType.Boolean:
        	dataRow[j] = row.GetCell(j).BooleanCellValue;
            break;
        case CellType.Error:
            dataRow[j] = HSSFErrorConstants.GetText(row.GetCell(j).ErrorCellValue);
            break;
        case CellType.Formula:
            action(row.GetCell(j).CachedFormulaResultType);
            break;
        default:
            dataRow[j] = row.GetCell(j).ToString().Trim();
            break;
	}
};
action(row.GetCell(j).CellType);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要读取合并单元格的数据,需要使用 NPOI 库中的 CellRangeAddress 类来获取合并单元格的范围,并在处理每个单元格判断它是否在合并单元格范围内。以下是一个简单的示例代码: ```csharp using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // 打开 Excel 文件 using (FileStream fs = new FileStream("test.xlsx", FileMode.Open, FileAccess.Read)) { XSSFWorkbook workbook = new XSSFWorkbook(fs); ISheet sheet = workbook.GetSheetAt(0); // 遍历所有行 for (int i = 0; i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); if (row == null) continue; // 遍历所有列 for (int j = 0; j < row.LastCellNum; j++) { ICell cell = row.GetCell(j); if (cell == null) continue; // 判断单元格是否在合并单元格范围内 bool isMerged = false; for (int k = 0; k < sheet.NumMergedRegions; k++) { CellRangeAddress range = sheet.GetMergedRegion(k); if (range.IsInRange(i, j)) { isMerged = true; break; } } // 如果单元格在合并单元格范围内,则获取合并单元格的值 if (isMerged) { ICell firstCell = sheet.GetRow(range.FirstRow).GetCell(range.FirstColumn); Console.WriteLine(firstCell.ToString()); } else { Console.WriteLine(cell.ToString()); } } } } ``` 需要注意的是,由于合并单元格可能会跨越多行或多列,因此在判断单元格是否在合并单元格范围内需要使用 CellRangeAddress 类的 IsInRange 方法。此外,如果单元格在合并单元格范围内,则需要获取合并单元格的第一个单元格的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值