最近项目有需求要做几个报表,页面涉及行列的合并和分组,费了九牛二虎之力把jsp页面展示给做完了,但是更困难的其实是导出功能,简单的excel导出大致就是第一行标题,后续数据,使用poi包的HSSFWorkbook等工具类就可以实现,这里不做赘述。但LZ这次的需求涉及行和列的合并,带参数的标题头等苦难,用代码控制略显繁琐,且不容易操作。LZ无奈借助百度君,找到jxls模板语言导出模板excel的解决方案,几番尝试后证实,功能可用且相当强大。
首先第一步,引入jar包,最主要的两个,jxls-core-x.x.x.jar和poi-x.x.jar。接下来封装自己的数据,结构可以全部是Map,List组合,也可以自己封装对象,最后存储在一个map中,作为参数使用。代码样例:
private void buildXLS(Map map, String filePath, String targetPath) { XLSTransformer transformer = new XLSTransformer(); try { InputStream is = new FileInputStream(filePath); XSSFWorkbook workBook = (XSSFWorkbook) transformer.transformXLS(is,map); workBook.setActiveSheet(0); OutputStream os = new FileOutputStream(targetPath); workBook.write(os); is.close(); os.flush(); } catch (FileNotFoundException e) { log.error(e); } catch (IOException e) { log.error(e); } catch (Exception e) { log.error(e); } } public String execute() { ... //生成excel文件 buildXLS(map, filePath, targetPath); inputStream = new FileInputStream(targetPath); fileName = "SheetMonthReport.xlsx"; return "file"; }
struts配置:
<result name="file" type="stream"> <param name="inputName">inputStream</param> <param name="contentType">application/octet-stream</param> <param name="contentDisposition">attachment;filename="${fileName}"</param> <param name="bufferSize">4096</param> </result>
当然了,前面说的都是铺叙,现在说下重点,excel模板导出具体怎么做呢,先把自己的模板搞好,根据客户的需求或者自己琢磨一个华丽的模板,然后就需要嵌入jx标签了。
list类型的遍历
xx | yy |
<jx:forEach items="${datas}" var="data"> | |
${data.SHEETNO} | ${data.SHEET_NUM} |
</jx:forEach> | |
合计 | $[SUM(B4)] |
Map类型的遍历
xx | yy |
<jx:forEach items="${brokenMonthMap.keySet()}" var="key" varStatus="status"> | |
${key} | ${brokenMonthMap.get(key).get('aaa').get('bbb')} |
</jx:forEach> |
组合遍历
名称 | <jx:forEach items="${nums}" var="num" varStatus="count"> | 值${count.index+1} | </jx:forEach> |
<jx:forEach items="${datas}" var="data" varStatus="status"> | |||
参数${status.index+1} | <jx:forEach items="${data.keySet()}" var="key" varStatus="count"> | ${data.get(key)} | </jx:forEach> |
</jx:forEach> |
if判断
<jx:if test="${entity.params==1}"> |
zz |
</jx:if> |
注意:所有的标签都是单独存在的,必须单独放在某一个单元格中,且前后不能有多余字符,特别注意左右不能有空格。LZ在这里只是简单介绍下jxls的语法,开发一些简单的excel模板报表基本够用了,如果有更复杂的数据类型或者展示方式,详情可自行查找相关文档自己学习。
相关推荐
用Jxls实现数据导入excel实例java代码
使用jxls技术,自己创建Excel模板导出数据
NULL 博文链接:https://siyuan-zhu.iteye.com/blog/2240423
jxls利用模板生成excel文件, 非常方便
java利用jxls操作excel模板文件
做了一个简单的springboot功能,用maven管理项目,利用jxls实现到处excel功能,jxls使用简单,只需定义一个excel模板,在excel中使用jx公式即可轻松实现,具体可查看项目,运行Application.java的main方法即可启动...
使用JXLS+Excel模板制作灵活的excel导出
jxls教程 使用Java操作Excel,创建模板生成 jxls教程 使用Java操作Excel,创建模板生成
一个Maven项目,下载直接使用,直接找到 JxlsTest运行demo即可,功能强大,基本能满足所有报表的导出需求,支持多个Sheet导出,支持复杂的导出组合,可以自己写模板试玩下。
在Java中实现Excel表格的书写,通过创建一个普通的Excel模板,调用jxsl接口输出符合条件的数据。
java导出Excel表格,jxls模板导出Excel,如何使用模板导出Excel
亲自使用的jxls导出功能,使用方法在文档里有说明。。。
#####jXLS - 使用 XLS 模板将数据导出到 Excel 要使用 jXLS 引擎,您必须将 jxls-core jar 放在类路径中。 如果您打算使用 jXLS 读取 XLS 文件,则必须将 jxls-reader jar 文件添加到类路径中。 如果您使用 Maven...
NULL 博文链接:https://utopialxw.iteye.com/blog/2316970
java 通过JXL架包,给excel文件添加水印,水印内容可自定义
使用xls或xlsx模板(jxls语法)导出Excel并下载的demo。
通过jxls和poi导出excel的dome,支持2003至2013版的excel的导出。通过将数据注入的已写好的模板中导出到指定路径下。
JXLS将数据库取得的数据根据Excel模板导出
jxl 读取Excel模板并写入数据通用工具类