poi操作excel中,长用的一些可以使用的代码
Posted rensheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poi操作excel中,长用的一些可以使用的代码相关的知识,希望对你有一定的参考价值。
1. 根据 单元格的位置字符串,得到所在的行和列; 例如 “A2”-第一行第二列
// 数据开始行,列 String startDataCell = "A2"; CellReference cellReference = new CellReference(startDataCell); int dataStartRow = cellReference.getRow(); int dataStartCol = cellReference.getCol();
2. 根据 sheet 获取该sheet中所有的合并单元格区域
int numMergedRegions = sheet.getNumMergedRegions(); for (int i = 0; i < numMergedRegions; i++) { CellRangeAddress mergedRegion = sourceSheet.getMergedRegion(i); int firstRow = mergedRegion.getFirstRow(); int firstColumn = mergedRegion.getFirstColumn(); int lastRow = mergedRegion.getLastRow(); int lastColumn = mergedRegion.getLastColumn(); // 根据坐标,创建新的合并区域 CellRangeAddress cellRangeAddress = new CellRangeAddress(firstRow, lastRow, firstColumn, lastColumn); targetSheet.addMergedRegion(cellRangeAddress); }
3. 单元格格式 复制
// 将源单元格的格式 赋值到 目标单元格中 CellStyle sourceCellStyle = sourceCell.getCellStyle(); /* 此处由于是新建了workbook对象,只能新建 CellStyle对象,然后clone,再赋值; 直接赋值 源CellStyle对象 会报不是同源异常 */ CellStyle targetCellStyle = targetWorkBook.createCellStyle(); targetCellStyle.cloneStyleFrom(sourceCellStyle); targetCell.setCellStyle(targetCellStyle);
4. 根据单元格类型,获取对应类型的值
// 获取单元格类型,处理公式单元格 CellType cellTypeEnum = sourceCell.getCellTypeEnum(); switch (cellTypeEnum) { case STRING: targetCell.setCellValue(sourceCell.getStringCellValue()); break; case NUMERIC: if (DateUtil.isCellDateFormatted(sourceCell)) { // 日期格式的值 targetCell.setCellValue(sourceCell.getDateCellValue()); } else { targetCell.setCellValue(sourceCell.getNumericCellValue()); } break; case BOOLEAN: targetCell.setCellValue(sourceCell.getBooleanCellValue()); break; case FORMULA: // ***为公式的情况下获取的是单元格的数值 try { targetCell.setCellValue(sourceCell.getNumericCellValue()); } catch (IllegalStateException e) { LOGGER.error("单元格公式计算错误:公式为" + sourceCell.getCellFormula()); targetCell.setCellValue("单元格计算出错"); } break; case BLANK: break; case ERROR: targetCell.setCellValue(sourceCell.getErrorCellValue()); break; case _NONE: break; default: }
5. 单元格中有公式的情况,直接在代码进行计算,获取excel的计算器
// 获取计算器 FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(); // 计算所有的单元格的值 formulaEvaluator.evaluateAll();
6. 公式依赖其他excel的情况,给当前计算器,注入其他excel的计算器
//Excel依赖计算集合 Map<String, FormulaEvaluator> workbooks = new HashMap<>(); //放入依赖的计算器 workbooks.put(v.getModelFileName(),targetWorkbook.getCreationHelper().createFormulaEvaluator()); //给当前计算器设置依赖的计算器 FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(); formulaEvaluator.setupReferencedWorkbooks(workbooks); // 计算器计算 formulaEvaluator.evaluateAll();
以上是关于poi操作excel中,长用的一些可以使用的代码的主要内容,如果未能解决你的问题,请参考以下文章