1.在excel中新增行和单元格

首先在excel中指定行之后新增单元格,如果后面还有行数据的话,则需要先执行sheet.shiftRows()操作,将后面的数据往下移动需要新增行的行数。然后再执行sheet.createRow()和dstRow.createCell()方法。

2.复制单元格的值,以及复制之后的单元格上公式往下递增的操作

/**
* 拷贝单元格
* @param srcCell
* @param distCell
*/
private void copyCell(Sheet sheet, Cell srcCell, Cell distCell){if(null == srcCell){return;}if (srcCell.getCellStyle() != null) {distCell.setCellStyle(srcCell.getCellStyle());}if(srcCell.getCellComment() != null){distCell.setCellComment(srcCell.getCellComment());}int srcCellType=srcCell.getCellType();distCell.setCellType(srcCellType);switch (srcCellType){case Cell.CELL_TYPE_NUMERIC:if(DateUtil.isCellDateFormatted(srcCell)){distCell.setCellValue(srcCell.getDateCellValue());} else{distCell.setCellValue(srcCell.getNumericCellValue());}break;case Cell.CELL_TYPE_STRING:distCell.setCellValue(srcCell.getRichStringCellValue());break;case Cell.CELL_TYPE_BOOLEAN:distCell.setCellValue(srcCell.getBooleanCellValue());break;case Cell.CELL_TYPE_FORMULA:// 拷贝单元格并且递增公式copyFormula(sheet, srcCell, distCell);break;case Cell.CELL_TYPE_ERROR:distCell.setCellErrorValue(srcCell.getErrorCellValue());break;case Cell.CELL_TYPE_BLANK:break;default:// do nothing}
}/*** 拷贝公式并且公式在表格上依次递增下去* @param sheet* @param org* @param dest*/
private void copyFormula(Sheet sheet, Cell org, Cell dest) {if (org == null || dest == null || sheet == null|| org.getCellType() != Cell.CELL_TYPE_FORMULA)return;if (org.isPartOfArrayFormulaGroup())return;String formula = org.getCellFormula();int shiftRows = dest.getRowIndex() - org.getRowIndex();int shiftCols = dest.getColumnIndex() - org.getColumnIndex();Workbook workbook = sheet.getWorkbook();FormulaRenderingWorkbook workbookWrapper = null;Ptg[] ptgs = null;if(workbook instanceof XSSFWorkbook){XSSFEvaluationWorkbook xssfEvaluationWorkbook = XSSFEvaluationWorkbook.create((XSSFWorkbook) sheet.getWorkbook());ptgs = FormulaParser.parse(formula, xssfEvaluationWorkbook, FormulaType.CELL, sheet.getWorkbook().getSheetIndex(sheet));workbookWrapper = xssfEvaluationWorkbook;}else if(workbook instanceof HSSFWorkbook){HSSFEvaluationWorkbook hssfEvaluationWorkbook = HSSFEvaluationWorkbook.create((HSSFWorkbook) sheet.getWorkbook());ptgs = FormulaParser.parse(formula, hssfEvaluationWorkbook, FormulaType.CELL, sheet.getWorkbook().getSheetIndex(sheet));workbookWrapper = hssfEvaluationWorkbook;}assert ptgs != null;for (Ptg ptg : ptgs) {if (ptg instanceof RefPtgBase) // base class for cell references{RefPtgBase ref = (RefPtgBase) ptg;if (ref.isColRelative())ref.setColumn(ref.getColumn() + shiftCols);if (ref.isRowRelative())ref.setRow(ref.getRow() + shiftRows);} else if (ptg instanceof AreaPtg) // base class for range references{AreaPtg ref = (AreaPtg) ptg;if (ref.isFirstColRelative())ref.setFirstColumn(ref.getFirstColumn() + shiftCols);if (ref.isLastColRelative())ref.setLastColumn(ref.getLastColumn() + shiftCols);if (ref.isFirstRowRelative())ref.setFirstRow(ref.getFirstRow() + shiftRows);if (ref.isLastRowRelative())ref.setLastRow(ref.getLastRow() + shiftRows);}}assert workbookWrapper != null;formula = FormulaRenderer.toFormulaString(workbookWrapper, ptgs);dest.setCellFormula(formula);
}

3.新增完行之后,或者拷贝了旧行上的公式之后,打开excel公式未计算

可以对整个 Workbook.setForceFormulaRecalculation(true) 设置强制重计算 或者 对单个sheet页开启强制重新计算 Sheet.setForceFormulaRecalculation(true)

4.针对excel底表上执行公式,但是公式不计算的问题

需要注意的是:针对公式计算的单元格的类型都不能是字符串这种不能进行计算的类型,所以在写入需要针对要计算的单元格的设置对应的单元格格式。

private void dealCellType(Object value, Cell cell){if(null == value || StringUtils.isBlank(value.toString())){cell.setCellValue(StringUtils.EMPTY);cell.setCellType(Cell.CELL_TYPE_BLANK);} else if(isNumeric2(value.toString())){cell.setCellValue(Double.parseDouble(value.toString()));cell.setCellType(Cell.CELL_TYPE_NUMERIC);}else{cell.setCellValue(value.toString());cell.setCellType(Cell.CELL_TYPE_STRING);}
}/**
* 判断是否是数字
*/
private static final Pattern NUMBER_PATTERN = Pattern.compile("-?\\d+(\\.\\d+)?");
public static boolean isNumeric2(String str) {return str != null && !StringUtils.isBlank(str) && NUMBER_PATTERN.matcher(str).matches();
}

Java POI操作Excel记录相关推荐

  1. Java - Poi 操作 Excel

    Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...

  2. Java poi操作Excel单元格样式

    Java poi设置Excel单元格格式设置 XSSFWorkbook xwb = new XSSFWorkbook();或者 XSSFWorkbook xwb = new XSSFWorkbook( ...

  3. java poi操作excel 添加 锁定单元格保护

    Excel的book保护是很常用的,主要是不想让别人修改Excel的时候用.这样能够避免恶意随便修改数据,提高数据的可信度. 下面介绍JAVA POI来实现设置book保护: 使用HSSFSheet类 ...

  4. java poi 操作Excel 删除行内容和直接删除行

    一般情况下,删除行时会面临两种情况:删除行内容但保留行位置.整行删除(删除后下方单元格上移).对应的删除方法分别是: void removeRow(Row row)//Remove a row fro ...

  5. java poi 操作 excel 读取本地Excel / 保存excel到本地 / url下载excel

    pom.xml 配置poi版本 <dependency><groupId>org.apache.poi</groupId><artifactId>poi ...

  6. java POI操作Excel代码收藏 (包括标题垂直水平居中)

    [size=large][color=red][b]1.HSSF 2003版Excel导出[/b][/color][/size] package com.hwt.glmf.common; import ...

  7. 利用java poi对excel表的读写操作

    2019独角兽企业重金招聘Python工程师标准>>> 利用java poi对excel表的读写操作 POI简介: Apache POI是一种流行的API,它允许程序员使用Java程 ...

  8. java apache.poi_Java利用apache的POI操作Excel

    最近在写一些报表的活,顺便总结下...第一篇博文,希望多多指教. 项目中经常会设计到一些数据的报表问题,目前java中操作Excel的插件也有很多 ,我说下用apache的POI操作Excel的方法. ...

  9. execle java,Java使用POI操作Excel

    Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...

最新文章

  1. Our Proof : Page Scraping : Website Data Extraction : Data Mining Analytics : Connotate.com
  2. python文件运行问题
  3. 安装vue脚手架创建项目
  4. SMARTFORM 转 PDF
  5. Linux 操作系统太难?先爬过这 6 个陡坡
  6. Spring MVC 返回NULL时客户端用$.getJSON的问题
  7. myeclipse部署ssh项目工程
  8. pytorch 实现 LSTM AutoEncoder 与案例
  9. 《oracle每天一练》Oracle冷备份与数据恢复
  10. 鹅厂员工平均月薪7万刷屏!公司每天赚9.5亿,养5.46万人
  11. iOS 给测试人员测试手机APP的四种方法:真机运行(略),打ipa包,(testFlighe)邮件,蒲公英(二)testflight
  12. c++ Protobuf中set_allocated引起的double free core dump
  13. knn——model celectionpreprocessing
  14. 七种实用地方微信推广方法,三个月7000粉丝的秘诀
  15. 斯坦福大学区块链期末考试题
  16. 人与自然超越彩虹-下
  17. 最主流的五个大数据处理框架的优势对比
  18. IOS开发:如何修改 SwiftUI 模板项目的启动页面
  19. 入门Retrofit,看这一篇就够了
  20. 前端开源库 CDN 加速

热门文章

  1. async和awit使用
  2. 高德置地苏萌:高德置地广场在“第三空间”用美食美酒连接世界
  3. js+Canvas实现时钟图,简单易懂
  4. 自学Java开发技术靠谱吗?
  5. python 异常处理 应急预案
  6. 计算机组成原理课后题答案唐朔飞,《计算机组成原理课后习题及答案唐朔飞》好详细.ppt...
  7. ​HTML选项卡制作
  8. Javascript---获取系统时间,实现12小时制并判断上午或下午
  9. ABP框架初试(2)
  10. 门店、商品、渠道、会员数字化管理难?一套Smartbi快消零售BI解决方案全解决