jXLS是什么东东?
- 官方介绍:jXLS is a small and easy-to-use Java library for writing Excel files using XLS templates and reading data from Excel into Java objects using XML configuration.
- 哎呀这是什么呀,来点能看的懂的吧,这个大体的意思就是:jXLS是一个基于XML配置的小型,易于使用java类库,可以用来写Excel格式文档,也可以用来读取Excel格式文档中的数据。
- 通俗的说,在java程序中,我们可以基于Excel的模板和最终Excel文档中显示的数据,使用jXLS完成Excel格式文档的生成。这就要求我们在java程序中完成以下几项内容:
- 添加jXLS相关的jar包
- 在java程序中准备好需要生成到Excel文档中的数据
- 制作Excel格式的模板
- 编写基于jXLS的代码,把Excel模板和数据整合,生成Excel格式文档
基本使用
- 需求描述:把100名员工的信息(包含员工编号,员工姓名,员工性别,员工年龄,员工薪资)写入到Excel格式文档中。
- 实现
- 步骤一:创建一个maven工程,并添加依赖
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<dependencies>
<!-- jxls核心依赖 -->
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>
1.0
.
6
</version>
</dependency>
<!-- junit单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>
4.12
</version>
</dependency>
<!-- 日志的依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>
1.7
.
12
</version>
</dependency>
</dependencies>
- 步骤二:编写员工信息实体类
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public
class
EmployeeInfo {
private
String empNo;
//员工编号
private
String empName;
//员工姓名
private
String empSex;
//员工性别:1代表男,0代表女
private
Integer empAge;
//员工年龄
private
Double empSalary;
//员工薪资
public
String getEmpNo() {
return
empNo;
}
public
void
setEmpNo(String empNo) {
this
.empNo = empNo;
}
public
String getEmpName() {
return
empName;
}
public
void
setEmpName(String empName) {
this
.empName = empName;
}
public
String getEmpSex() {
return
empSex;
}
public
void
setEmpSex(String empSex) {
this
.empSex = empSex;
}
public
Integer getEmpAge() {
return
empAge;
}
public
void
setEmpAge(Integer empAge) {
this
.empAge = empAge;
}
public
Double getEmpSalary() {
return
empSalary;
}
public
void
setEmpSalary(Double empSalary) {
this
.empSalary = empSalary;
}
}
- 步骤三:模拟查询数据库得到100名员工的信息
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public
class
EmployeeDao {
/**
* 模拟查询数据库得到100名员工的信息
* @return :100名员工的信息
*/
public
List<EmployeeInfo> findEmployees(){
List<EmployeeInfo> list =
new
ArrayList<EmployeeInfo>();
for
(
int
i=
1
;i<=
100
;i++){
EmployeeInfo emp =
new
EmployeeInfo();
emp.setEmpNo(UUID.randomUUID().toString());
//使用UUID生成随机
emp.setEmpName(
"员工姓名"
+i);
emp.setEmpAge(
new
Random().nextInt(
40
));
//随机生成年龄
emp.setEmpSex(i%
2
+
""
);
//根据序号生成员工的性别
emp.setEmpSalary(
new
Random().nextDouble()*
10000
);
//随机生成薪资
list.add(emp);
}
return
list;
}
}
- 步骤四:制作Excel文档模板,复制到程序中src目录下
- 步骤五:编写导出Excel文档的代码
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public
class
ExportExcel {
public
void
expExcelWithJxls()
throws
Exception{
//1、获取导出文档中的数据,存放到一个Map集合中
EmployeeDao empDao =
new
EmployeeDao();
List<EmployeeInfo> employees = empDao.findEmployees();
Map<String,Object> map =
new
HashMap<String,Object>();
map.put(
"emps"
, employees);
//2、使用ClassLoader读取模板
InputStream inputStream =
this
.getClass().getClassLoader().getResourceAsStream(
"emp_template.xlsx"
);
//3、创建Excel文档转换器
XLSTransformer xlsTransformer =
new
XLSTransformer();
//4、基于数据和模板,转换成Excel文档
//第一个参数是模板的输入流
//第二个参数是需要生成到文档中的数据
Workbook workbook = xlsTransformer.transformXLS(inputStream, map);
//5、把Excel文档输出到指定位置
FileOutputStream outputStream =
new
FileOutputStream(
"d:/jxls/empInfo.xlsx"
);
workbook.write(outputStream);
}
}
- 步骤六:编写测试程序,测试导出员工信息的文档
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
public
class
ExcelTest {
@Test
public
void
exportExcel(){
ExportExcel excel =
new
ExportExcel();
try
{
excel.expExcelWithJxls();
}
catch
(Exception e) {
e.printStackTrace();
System.out.println(
"导出文档出现错误了,错误信息"
+e.getMessage());
}
}
}
- 导出Excel文档的效果
- 其中存在问题
- 问题描述:从导出的Excel文档的效果可以看出其中的性别显示的1或者0,而正常情况下应该显示男或者女,接下来就需要对此问题进行修复
- 问题修复:使用jXLS提供的另一个指令<jx:if test=""></jx:if>,其作用是判断值,从而指定显示的内容
- 修改后的模板
- 生成Excel文档的效果
- 需求变更:在生成Excel文档的同时,计算出员工薪资总金额,以及平均值
- 若要完成该需求,只需要修改Excel模板,修改之后的模板
- 生成Excel文档的效果
- 更多免费技术资料可关注:annalin1203
- 若要完成该需求,只需要修改Excel模板,修改之后的模板