使用java的poi工具类编辑excel
我所使用的编辑excel有两种方式:1.使用现成的模板进行填充输出。2.直接生成出新的excel。
第一种方式:模板填充:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //第一步:读取excel文件 try (FileInputStream fileInputStream = new FileInputStream(templateFilePath); Workbook workbook = new XSSFWorkbook(fileInputStream)) { //第二步,读取第一个sheet,有其他sheet则下标加一即可 Sheet sheet = workbook.getSheetAt( 0 ); //第三步:获取行或者创建行 Row row = sheet.createRow(rowNum); //获取行的代码是Row row = sheet.getRow(rowNum); //sheet有很多方法,比如getLastRow获取最后一行等,还能获取行号 //第四步:获取到行之后就可以获取列来编辑指定单元格的数据了,同样可以创建或者获取指定列 //或者Cell cell = row.getCell(j);,j是下标 Cell cell = row.createCell(j); //第五步:编辑该单元格,我这里是对序号的编辑 cell.setCellValue(i+ 1 ); //第六步:保存编辑好的excel文件 try (FileOutputStream fileOutputStream = new FileOutputStream(outPath)) { workbook.write(fileOutputStream); } } catch (Exception e){ e.printStackTrace(); } |
模板填充的方式可以根据原单元格的值来替换文本,
1 | Cell cell = row.createCell(j);替换为getCell(j).getCellValue();即可获取原始文本,进行判断之后进行文本替换也是可行的<br>二:设计单元格样式: |
public void setCellStyle(Workbook workbook,Cell cell){
// 创建一个样式
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
// 设置内容水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置内容垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cell.setCellStyle(cellStyle);
}
传一个工作博和指定单元格即可,设置上下左右边框和内容居中,也可以设计其它excel样式
三:不使用模板文件,直接替换单元格
其实写法和上面的模板替换差不多,只不过单元格都要使用createRow的方式创建,这里提供单元格的合并方法:
CellRangeAddress region = new CellRangeAddress(lastRowNum+1, lastRowNum+2, 0, 15);
参数是起始行,结束行,起始列,结束列,下标都是从0开始
没有模板的话主要不同的代码是
/** 第一步,创建一个Workbook,对应一个Excel文件 */
HSSFWorkbook wb = new HSSFWorkbook();
/** 第二步,在Workbook中添加一个sheet,对应Excel文件中的sheet */
HSSFSheet sheet = wb.createSheet("报表");
将读取改成创建即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?