1、导包

在pom.xml中加入依赖如下:

     <dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.4.</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>1.0.</version>
</dependency>

2、创建导出Excel的模板,实例如下:图1中的表达式(jx:each(items="object",var="order",lastCell="E4")),此处的object要与JxlsExporter.java中返回的集合的“键”保持一,下面给出可处理父子级关系的批注展示,类似于jstl中的each

图1 父级数据

图2 子级数据

图3 头部批注

说明:通过批注的形式,指定“作用域”范围,上图中lastCell表示在该坐标内输入表达式有效。

3、获取列表数据,并导出Excel,JxlsExporter.java 代码如下

package com.inmansoft.base.util; //template模板路径

import com.inmansoft.base.model.plan.LsBaseOrder;
import com.inmansoft.base.model.plan.LsDeptOrder;
import lombok.extern.slf4j.Slf4j;
import org.jxls.common.Context;
import org.jxls.transform.poi.PoiContext;
import org.jxls.util.JxlsHelper; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random; /**
* <p>title:</p>
* <p>description:</p>
*
* @author: zsj
* @date Created in 2019-01-06
* @modified By zsj
*/
@Slf4j
public class JxlsExporter {
private static String template = "leadshow.xls";
private static String output = "target/export_leadshow.xls"; public static void main(String[] args) throws IOException {
log.info("导出数据");
execute();
} public static void execute() throws IOException {
List<LsBaseOrder> lsBaseOrders = createLsBaseOrders(6);
log.info("Opening input stream");
//template 为模板路径:eg:leadshow.xls,
// JxlsExporter.class.getResourceAsStream(template)—> leadshow.xls模板路径需放置在该类包路径下
try (InputStream is = JxlsExporter.class.getResourceAsStream(template)) {
//output 为导出的Excel路径,有一个坑需要注意的是,在springboot项目打包成jar包之后,
//导出文件路径可这样表示: System.getProperty("user.dir") + "/export_leadshow.xls",这种"static/export_leadshow.xls"路径会失效
try (OutputStream os = new FileOutputStream(output)) {
Context context = new PoiContext();
context.putVar("object", lsBaseOrders);
JxlsHelper.getInstance().processTemplate(is, os, context);
}
}
} public static List<LsBaseOrder> createLsBaseOrders(int num) {
List<LsBaseOrder> lsBaseOrders = new ArrayList<>();
Random random = new Random();
for (int i = 1; i <= num; i++) {
LsBaseOrder item = new LsBaseOrder();
item.setItemName("2835 LED硬灯条" + i);
item.setItemSpec("60珠 8500K");
item.setSimpleCode("简码-" + i);
item.setCompanyName("华为公司"); List<LsDeptOrder> lsDeptOrders = new ArrayList<>();
item.setChildren(lsDeptOrders);
for (int j = 1; j <= random.nextInt(10); j++) {
LsDeptOrder deptOrder1 = new LsDeptOrder();
deptOrder1.setItemName("变压器" + j);
deptOrder1.setFullNum(12);
lsDeptOrders.add(deptOrder1);
}
lsBaseOrders.add(item);
}
return lsBaseOrders;
}
}

模板路径如下:(与上面Java类包路径一致)

最新文章

  1. PostgreSQL获取年月日
  2. 为什么匿名内部类和局部内部类只能访问final变量
  3. 2016.02.17 JS DOM编程艺术 第四五六章
  4. thinkphp数据库添加表单提交的数据
  5. PHP错误处理
  6. mysqldump原理3
  7. DataGridView 添加行 分类: DataGridView 2014-12-07 08:49 263人阅读 评论(0) 收藏
  8. hdu 5363Key Set
  9. MFC上下浮动与渐入渐出消息提示框实现
  10. android基础5——使用资源
  11. dp-史上最戳最长最臭代码-hdu-4733-G(x)
  12. C# Int 类型线程不安全
  13. 你知道RxJava也可以实现AsyncTask吗?
  14. 菜鸟系列docker——docker仓库(2)
  15. (转)Hashtable与ConcurrentHashMap区别
  16. 学习笔记之Git / Gitflow / TortoiseGit
  17. js中基本事件的总结,onclick、onblur、onchange等
  18. 我的openwrt开发相关文章
  19. redis make错误处理
  20. 安装JDK、Tomcat、Maven’详细步骤

热门文章

  1. Spring整合jdbc编程
  2. PHP计算上一个月最后一天、当月最后一天、下一个月最后一天
  3. 如何下载java的jdk
  4. PKU 1204 Word Puzzles(AC自动机)
  5. 本地多张图片采用jmeter上传到ftp服务器的方法和获取服务器日志中某些关键字的基本方法
  6. linux命令——chmod/chown
  7. CSS Position(定位)
  8. spring项目gitignore
  9. mapper的namespace
  10. gerrit代码审核工具之“error unpack failed error Missing unknown”错误解决思路