使用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("报表");
将读取改成创建即可
posted @   jiangyang6634  阅读(422)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示