开发者

Springboot使用jxls实现同sheet多个列表展示

开发者 https://www.devze.com 2024-08-16 10:19 出处:网络 作者: 专注写bug
目录前言制定模板1、限定模板数据的范围2、设定报表展示项编写测试类1、将xls模板文件放于 resource 下的 doc文件夹中2、导入依赖文件3、编写接口和导出逻辑效果预览结论前言
目录
  • 前言
  • 制定模板
    • 1、限定模板数据的范围
    • 2、设定报表展示项
  • 编写测试类
    • 1、将xls模板文件放于 resource 下的 doc文件夹中
    • 2、导入依赖文件
    • 3、编写接口和导出逻辑
  • 效果预览
    • 结论

      前言

      在之前的文章中Springboot——使用jxls实现excel模板导出excel,具体说明了jxls框架的基本使用。

      除了最简单的单列表展示外,jxls还具有同sheet页展示多个列表的能力,接下来一起继续探究。

      制定模板

      1、限定模板数据的范围

      采取下面的批注,指定需要渲染显示的报表范围。

      这里的范围只考虑第一行的范围!

      命令如下所示:

      jx:area(lastCell=”H15”)

      Springboot使用jxls实现同sheet多个列表展示

      2、设定报表展示项

      报表一,只显示单条数据。

      Springboot使用jxls实现同sheet多个列表展示

      报表二,进行列表展示,并设置批注,如下所示:

      jx:each(items="dataList2" var="item" lastCell="C8")

      Springboot使用jxls实现同sheet多个列表展示

      报表三,与报表二中的批注一样,只是接收参数变量名不同。

      批注如下所示:

      jx:each(items="dataList3" var="item" lastCell="C12")

      编写测试类

      1、将xls模板文件放于 resource 下的 doc文件夹中

      Springboot使用jxls实现同sheet多个列表展示

      2、导入依赖文件

      <!-- excel 填充 -->
      <dependency>
          <groupId>org.jxls</groupId>
          <artifactId>jxls</artifactId>
          <version>2.8.1</version>
      </dependency>
      <dependency>
          <groupId>net.sf.jxls</groupId>
          <artifactId>jxls-core</artifactId>
          <version>1.0.6</version>
      </dependency>
      <dependency>
          <groupId>org.jxls</groupId>
          <artifactId>jxls-poi</artifactId>
          <version>2.8.1</version>
      </dependency>

      3、编写接口和导出逻辑

      @RequestMapping("/ss")
      public void download(HttpServletRequest request,HttpServletRespojsnse response) throws Exception {
      
          Map<String, Object> map = new HashMap();
          map.put("name1","xiangjiao");
          map.put("age1","10");
          map.put("are1","中国");
      
          // 报表二
          List<Map<String, Object>> dataList = new ArrayList();
          for (int i = 0; i < 10; i++) {
              Map<String, Object> params = new HashMap<>();
              params.put("name2","1_"+i);
              params.put("age2","xj_"+i);
              params.put("are2",22);
              dataList.add(params);
          }
          // ${item.num}
          map.put("dataList2",dataList);
      
          // 报表三
          List<Map<String, Object>> dataList3 = new ArandroidrayList();
          for (int i = 0; i < 10; i++) {
              Map<String, Object> params = new HashMap<>();
              params.put("name2","1_"+i);
              params.put("age2","xj_"+i);
              params.put("are2",22);
              dataList3.add(params);
          }
          // ${item.num}
          map.put("dataList3",dataList3);
      
          export(map,"test.xls","666.xls",response);
      }
      
      public static void export(Map<String, Object> dataMap, String reportName,String fileName, HttpServletResponse response) throws IOException {
          Resource resource = new ClassPathResource("/doc" +File.separator+ reportName);
          InputStream in = resource.getInputStream();
          // 这里的context是jxls框架上的context内容
          Context context = PoiTransformer.createInitialContext();
          context.toMap().putAll(dataMap);
          Workbook workbook = WorkbookFactory.create(in);
          // Changing name of the first sheet
          workbook.setSheetName(0, "sheet1");
          PoiTransformer transfohttp://www.devze.comrmer = PoiTransformer.createTransformer(workbook);
          OutputStream out = response.getOutputStream();
          transfopythonrmer.setOutputStream(out);
      
          // 文件名 - 解决中文乱码问题
          String filename = URLEncoder.encode(fileName, "UTF-8");
          //python 设置响应编码
          response.setCharacterEncoding("UTF-8");
          response.setContentType("application/x-download");
          response.setHeader("Content-Disposition", "attachment;filename=" + filename);
      
          JxlsHelper.getInstance().processTemplate(context, transformer);
          in.close();
      
          out.flush();
          out.close();
      }

      效果预览

      Springboot使用jxls实现同sheet多个列表展示

      结论

      jxls能够完美的实现样式自定义单数据多报表集成。

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号