用JXLS、轻松导,嵌套、样式随你设
jxls是一个简单的、轻量级的excel导出库,使用特定的标记在excel模板文件中来定义输出格式和布局。java中成熟的excel导出工具有pol、jxl,但他们都是使用java代码的方式来导出excel,编码效率很低且不方便维护。
另外,jxls2.3的运行效率也相当不错,经过测试,在禁用日志输出的情况下,导出excel单表66535条记录仅仅3000毫秒,与poi几乎没什么大的差距。【源】
使用:
首先pom文件中添加
<!-- https://mvnrepository.com/artifact/net.sf.jxls/jxls-core -->
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
</dependency>
其次定义模板:
这个contents一会代码中map的key要对应上,其实就是foreach循环,简单吧;下面再说一个比较常用的if判断、没错 还有if判断哦,从此在也不导出
jx:if标签可以基于某些条件来排除某些行或是某些列,如果你把jx:if标签的开始标签和结束标签放在同一行的话,JXLS会根据test的条件来处理或删除包含在标签提内的列;如果你把jx:if标签的开始标签和结束标签放在不同行的话,JXLS会根据test的条件来处理或删除包含在标签提内的行。【源】
下面上代码:数据量有点大,所以加了个线程、执行一遍 速度上去了 文件没有数据 有知道原理的欢迎指导一二
/**
* 普通按照模板导出为excel
* @throws IOException
*/
@Test
public void Test1() throws IOException, InvalidFormatException {
String tplPath = "E:\\image\\ne\\jxls方式导出excel模板.xls";
UUID uuid = UUID.randomUUID();
String destPath = "E:\\image\\ne\\贝瓦资源" + uuid.toString() + ".xls";
//查询Excel用科目树
List<OriginBevaContentModel> subjectTree = new ArrayList<OriginBevaContentModel>();
subjectTree = getBevaData.getCatContentAndSaveToMySQL();
Map<String, List<OriginBevaContentModel>> beanParams = new HashMap<String, List<OriginBevaContentModel>>();
beanParams.put("contents", subjectTree);
XLSTransformer former = new XLSTransformer();
former.transformXLS(tplPath, beanParams, destPath);
// ExecutorService executorService = Executors.newFixedThreadPool(3);
// executorService.execute(new Runnable() {
// @Override
// public void run() {
// try {
// former.transformXLS(tplPath, beanParams, destPath);
// } catch (IOException e) {
// e.printStackTrace();
// } catch (InvalidFormatException e) {
// e.printStackTrace();
// }
// }
// });
// executorService.shutdown();
}
结果一角:if判断其作用了,因为太长没有截取,大概就是这样;还有有点瑕疵 大家也看到了 :没有合并! 合并的方法还是有点,有图为证:(前方高能、请相信这是jxls做出来的,而且代码不是很多哦)
https://blog.csdn.net/hu_shengyang/article/list/8 大牛博客里面有系列博文
https://blog.csdn.net/sinat_27115575/article/details/60957207
O(∩_∩)O哈哈~真让人高兴