SpringBoot快速集成jxls-poi(自定义模板,支持本地文件导出,在线文件导出)

  

在项目持续集成的过程中,有时候需要实现报表导出和文档导出,类似于excel中这种文档的导出,在要求不高的情况下,有人可能会考虑直接导出csv文件来简化导出过程。但是导出xlsx文件,其实过程相对更复杂。解决方案就是使用poi的jar包。使用源生的poi来操作表格,代码冗余,处理复杂,同时poi的相关联的依赖还会存在版本兼容问题,所以直接使用poi来实现表格导出,维护成本大,不易于拓展。

  

我们需要学会站在巨人的肩膀上解决问题,jxls-poi这个就很好解决这个excel表格导出的多样化的问题。类似jsp和thymealf的模板定义,使得表格导出变得简单可控。

  

不多BB上代码

  

<强> 1。引入关键依赖包

        & lt; !——jxls-api依赖——比;   & lt; dependency>   & lt; groupId> org.jxls   & lt; artifactId> jxls-poi   & lt; version> 1.0.15   & lt;/dependency>      & lt; dependency>   & lt; groupId> org.jxls   & lt; artifactId> jxls   & lt; version> 2.4.6   & lt;/dependency>   之前      

这里只需要两个依赖便操作excel表格了。

  

<强> 2。定义模板文件

  

 SpringBoot快速集成jxls-poi(自定义模板,支持本地文件导出,在线文件导出)
  

  

新建一个excel文件,后缀名为.xlsx,在资源目录下新增一个jxl的文件夹,把模板文件放在这个文件夹下,便于后续的spring-boot的集成。

  

<强> 3。导出工具类

     /* *   * @author machenike   */公开课ExcelUtils {/* * *   * excel导出到响应   * @param文件名导出文件名   * @param templateFile模板文件地址   * @param params数据集合   * @param反应反应   */公共静态孔隙exportExcel(字符串文件名、InputStream templateFile Map<字符串,Object>参数,   HttpServletResponse响应)抛出IOException {   response.reset ();   响应。setHeader (“Accept-Ranges”、“字节”);   OutputStream os=零;   响应。setHeader(“附加”,String.format(“附件;文件名=\ " % s \ ",文件名));   response.setContentType(“应用程序/八进制;charset=utf - 8”);   尝试{   操作系统=response.getOutputStream ();   exportExcel (templateFile、参数、操作系统);   }捕捉(IOException e) {   把e;   }   }/* *   *导出excel到输出流中   * @param templateFile模板文件   * @param params传入参数   * @param os输出流   * @throws IOException   */公共静态孔隙exportExcel (InputStream templateFile Map<字符串,Object>params, OutputStream os)抛出IOException {   尝试{   上下文语境=new上下文();   Set键盘=params.keySet ();   (字符串键:键盘){//设置参数变量   上下文。putVar(关键params.get(键));   }   Object> Map<字符串;,myFunction=new HashMap<的在();   myFunction。把(“有趣”,新的ExcelUtils ());//启动新的jxls-api加载自定义方法   变压器trans=TransformerFactory。createTransformer (templateFile、os);   .getExpressionEvaluator JexlExpressionEvaluator评估者=(JexlExpressionEvaluator) trans.getTransformationConfig () ();   evaluator.getJexlEngine () .setFunctions myFunction ();//载入模板,处理导出   AreaBuilder AreaBuilder=new XlsCommentAreaBuilder(反式);   ListareaList=areaBuilder.build ();   areaList.get (0)。applyAt(新CellRef (“sheet1 ! A1”),上下文);   trans.write ();   }捕捉(IOException e) {   把e;   最后}{   尝试{   如果(os !=null) {   os.flush ();   os.close ();   }   如果(templateFile !=null) {   templateFile.close ();   }   }捕捉(IOException e) {   把e;   }   }   }/* *   *格式化时间   */公共对象formatDate(日期日期){   如果(日期!=null) {   SimpleDateFormat自卫队=new SimpleDateFormat (“yyyy-MM-dd HH: mm: ss”);   字符串dateStr=sdf.format(日期);   返回dateStr;   }   返回“-”;   }/* *   *设置超链接方法   */公共WritableCellValue getLink(字符串地址字符串标题){   返回新WritableHyperlink(地址、标题);   }   }      

这个工具类中我定义两个导出用的方法
  一个是直接是HttpServletResponse导出在线下载文件
  一个使用输入流导出
  同时模板中还支持方法传入。

SpringBoot快速集成jxls-poi(自定义模板,支持本地文件导出,在线文件导出)