通过Apache POI在java中对excel文件进行操作并导出

1.导入依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version>
</dependency>
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.16</version>
</dependency>

如果自己的excel表格结构比较复杂,虽然可以通过java代码进行一步步设置,只不过有些繁琐,因此我们可以先编辑好代码的模板,接下类我们只需要读取模板向里面填充数据即可。

2.将编辑好的模板资源放在资源目录下,通过类加载器加载准备好的excel模板,并返回一个输入流

//通过POI写入到excel文件
InputStream in=this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");

3.基于模板文件创建excel文件

XSSFWorkbook excel=new XSSFWorkbook(in);

4.接下来便是填充数据,每个人的模板与格式不同,自己根据自己的模板填充即可,注意excel表格的行和列都是从0开始,下面的是我所填充的数据

XSSFSheet sheet = excel.getSheet("sheet1");
sheet.getRow(1).getCell(1).setCellValue(
    "时间:"+beginTime.toString()+
    "至"+endTime.toString());
XSSFRow row=sheet.getRow(3);
row.getCell(2).setCellValue(businessDataVO.getTurnover());
row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
row.getCell(6).setCellValue(businessDataVO.getNewUsers());
row=sheet.getRow(4);
row.getCell(2).setCellValue(businessDataVO.getValidOrderCount());
row.getCell(4).setCellValue(businessDataVO.getUnitPrice());
//填充明细数据
for(int i=0;i<30;i++)
{
    LocalDate date=begin.plusDays(i);
    BusinessDataVO businessData
             =workspaceService.getBusinessData
            (LocalDateTime.of(date,LocalTime.MIN),LocalDateTime.of(date,LocalTime.MAX));
    row=sheet.getRow(7+i);
    row.getCell(1).setCellValue(date.toString());
    row.getCell(2).setCellValue(businessDataVO.getTurnover());
    row.getCell(3).setCellValue(businessDataVO.getValidOrderCount());
    row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
    row.getCell(5).setCellValue(businessDataVO.getUnitPrice());
    row.getCell(6).setCellValue(businessDataVO.getNewUsers());
}

5.通过输出流将编辑好的excel文件下载到客户端

ServletOutputStream out = response.getOutputStream();
excel.write(out);

6.关闭资源

out.close();
in.close();
excel.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值