springboot+poi开发excel导出 加载Excel模板导出 Excel导出详解

提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并以及背景色,字体颜色的填充,文本内容的对齐方式等)。

实现思路:

首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口业务代码里通过IO流加载到这个Excel模板文件,读取指定的工作薄(也就是excel左下角的Sheet),接着给模板里的指定表头填充表头数据,接着读取数据库的相关数据用数据传输模型(DTO)封装数据,最后循坏填充excel的数据行(逐行逐列的填充数据),最后把填充完数据的Excel文件流输出(下载),即完成了数据库数据按照指定Excel模板导出Excel的完整过程。废话不多说,下面直接上代码。

一、配置POI框架的依赖

本案例是maven项目,解析Excel采用市面主流的POI框架,在pom.xml文件添加POI框架的依赖

<!--读取excel文件,配置POI框架的依赖-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

二、放入excel模板文件

二、导出excel具体实现

@RestController
@RequestMapping("/excel")
public class ExcelExportController {
 
    
  @RequestMapping(value="/excelExport")
  public ResponseEntity<Resource> excel2007Export(HttpServletResponse response,HttpServletRequest request) {
   try {
     ClassPathResource cpr = new ClassPathResource("/templates/"+"student.xlsx");
     InputStream is = cpr.getInputStream();
     Workbook workbook = new XSSFWorkbook(is);
     org.apache.poi.ss.usermodel.Sheet sheet0 =workbook.getSheetAt(0);
     Row row = sheet0.getRow(2);
     Cell cell0 = row.getCell(0);
     Cell cell1 = row.getCell(1);
     Cell cell2 = row.getCell(2);
     cell0.setCellValue("guo");
     cell1.setCellValue("bin");
     cell2.setCellValue("hui");
     System.out.println(cell0);
     //这里作为演示,造几个演示数据,模拟数据库里查数据
     List <Student> list =  new ArrayList<Student>();
    Student st1 = new Student();
    Student st2 = new Student();
    st1.setName("张三");
    st1.setScore("87");
    st1.setClass("一班");
    st2.setName("张四");
    st2.setScore("57");
    st2.setClass("二班");
    list.add(st1);
    list.add(st2);
    for(int i = 0;i<list.size();i++){
        Row row = sheet0.getRow(i+3);//从第三行开始填充数据
        row.setCellValue(list.get(i).getName());
        row.setCellValue(list.get(i).getScore());
        row.setCellValue(list.get(i).getClass());
    }
    String fileName = "moban.xlsx";
    downLoadExcel(fileName, response, workbook);
            
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return new ResponseEntity<Resource>(HttpStatus.OK);
}
    
public static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
    try {
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("Content-Disposition",
                    "attachment;filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
        workbook.write(response.getOutputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }
   }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值