使用Jxls导出excel表格
你是否还在使用传统的ApachePOI方式导出excel呢?
你是否还在为导出excel表格写许多复杂的代码?
今天给大家介绍一个非常简单的工具–Jxls。
使用它可以非常方便的导出excel。
它支持excel的模板输出,支持for循环,if判断,脚本等。
今天我们就来使用Jxls来导出excel表格
1.新建springboot项目
如果不会使用springboot,可以先学习SpringBoot教程
2.引入jxls相关的jar包
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>2.8.1</version>
</dependency>
3.新建一个实体类
public class Student {
private String name;
private String className;
private String age;
private String address;
public Student(String name,String className,String age,String address){
this.name = name;
this.className = className;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
4.新建一个excel模板
在resources下的template的目录中我们新建一个student.xlsx的模板文件,
excel模板的内容定义显示姓名、班级、性别、地址,然在姓名单元格插入批注,
批注内容:jx:area(lastCell=“D2”)
这里的D2是指模板的区域大小
------------------- 插入解释 ------------------------------
什么是模板的区域呢?
我们新建一个模板后
表格A1包含区域的大小jx:area(lastCell=“D4”),意思是该模板的区域是从A1到D4
A4到D4是定义了一个jxls的循环命令jx:each(items=“employees” var=“employee” lastCell=“D4”),它会循环数据并展示出来,数据有多少就展示多少行的数据。
------------------- 解释结束 ------------------------------
模板中编写数据循环代码,同样在姓名下面的单元格D2插入批注
jx:each(items=“list” var=“obj” lastCell=“D2”)
解释:循环list集合,定义用obj表示一个对象
具体单元格的值使用
符
号
调
用
,
例
如
需
要
显
示
姓
名
则
填
入
符号调用,例如需要显示姓名则填入
符号调用,例如需要显示姓名则填入{obj.name},name对应对象的属性名称
5.编写生成excel的类
public class JxlsUtils {
private static String path = "template/";
public static void exportExcel(HttpServletResponse response, List<Object> list, String tempName) throws IOException {
Context context = new Context();
context.putVar("list",list);
String fileName=new String("学生信息".getBytes("UTF-8"),"ISO-8859-1");
response.setHeader("Content-Disposition",String.format("attachment;filename=%s.xlsx",fileName));
response.setContentType("application/x-excel;charset=UTF-8");
String templateName = String.format("%s%s.xlsx",path,tempName);
InputStream in = new ClassPathResource(templateName).getInputStream();
try{
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
ServletOutputStream out = response.getOutputStream();
Transformer transformer = jxlsHelper.createTransformer(in,out);
jxlsHelper.processTemplate(context,transformer);
out.flush();
out.close();
}finally {
if(Collections.singletonList(in).get(0)!=null){
in.close();
}
}
}
}
6.编写控制器
新建一个controller,调用excel生成工具
@RestController
@RequestMapping("/demo")
public class DemoController {
@RequestMapping("/excel")
public void exportExcel(HttpServletResponse response) throws IOException {
List list = new ArrayList<>();
for(int i=0;i<10000;i++){
Student student1 = new Student("zhangsan","一年级",String.valueOf(i),"xxx街道2号");
list.add(student1);
}
JxlsUtils.exportExcel(response,list,"student");
}
}
7.运行代码
访问/demo/excel,就能导出如下的excel表格
--------------------------你的赞赏是我写作的最大动力---------------------------