在Java程序中使用jXLS导出Excel格式文档
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] 纯文本查看 复制代码0102030405060708091011121314151617181920<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] 纯文本查看 复制代码0102030405060708091011121314151617181920212223242526272829303132333435363738publicclassEmployeeInfo {privateString empNo;//员工编号privateString empName;//员工姓名privateString empSex;//员工性别:1代表男,0代表女privateInteger empAge;//员工年龄privateDouble empSalary;//员工薪资publicString getEmpNo() {returnempNo;}publicvoidsetEmpNo(String empNo) {this.empNo = empNo;}publicString getEmpName() {returnempName;}publicvoidsetEmpName(String empName) {this.empName = empName;}publicString getEmpSex() {returnempSex;}publicvoidsetEmpSex(String empSex) {this.empSex = empSex;}publicInteger getEmpAge() {returnempAge;}publicvoidsetEmpAge(Integer empAge) {this.empAge = empAge;}publicDouble getEmpSalary() {returnempSalary;}publicvoidsetEmpSalary(Double empSalary) {this.empSalary = empSalary;}}
- 步骤三:模拟查询数据库得到100名员工的信息
[Java] 纯文本查看 复制代码0102030405060708091011121314151617181920212223publicclassEmployeeDao {/*** 模拟查询数据库得到100名员工的信息* @return :100名员工的信息*/publicList<EmployeeInfo> findEmployees(){List<EmployeeInfo> list =newArrayList<EmployeeInfo>();for(inti=1;i<=100;i++){EmployeeInfo emp =newEmployeeInfo();emp.setEmpNo(UUID.randomUUID().toString());//使用UUID生成随机emp.setEmpName("员工姓名"+i);emp.setEmpAge(newRandom().nextInt(40));//随机生成年龄emp.setEmpSex(i%2+"");//根据序号生成员工的性别emp.setEmpSalary(newRandom().nextDouble()*10000);//随机生成薪资list.add(emp);}returnlist;}}
- 步骤四:制作Excel文档模板,复制到程序中src目录下
<ignore_js_op>![]()
- 步骤五:编写导出Excel文档的代码
[Java] 纯文本查看 复制代码01020304050607080910111213141516171819202122232425publicclassExportExcel {publicvoidexpExcelWithJxls()throwsException{//1、获取导出文档中的数据,存放到一个Map集合中EmployeeDao empDao =newEmployeeDao();List<EmployeeInfo> employees = empDao.findEmployees();Map<String,Object> map =newHashMap<String,Object>();map.put("emps", employees);//2、使用ClassLoader读取模板InputStream inputStream =this.getClass().getClassLoader().getResourceAsStream("emp_template.xlsx");//3、创建Excel文档转换器XLSTransformer xlsTransformer =newXLSTransformer();//4、基于数据和模板,转换成Excel文档//第一个参数是模板的输入流//第二个参数是需要生成到文档中的数据Workbook workbook = xlsTransformer.transformXLS(inputStream, map);//5、把Excel文档输出到指定位置FileOutputStream outputStream =newFileOutputStream("d:/jxls/empInfo.xlsx");workbook.write(outputStream);}}
- 步骤六:编写测试程序,测试导出员工信息的文档
[Java] 纯文本查看 复制代码01020304050607080910111213publicclassExcelTest {@TestpublicvoidexportExcel(){ExportExcel excel =newExportExcel();try{excel.expExcelWithJxls();}catch(Exception e) {e.printStackTrace();System.out.println("导出文档出现错误了,错误信息"+e.getMessage());}}} - 导出Excel文档的效果
<ignore_js_op>
<ignore_js_op>![]()
- 其中存在问题
- 问题描述:从导出的Excel文档的效果可以看出其中的性别显示的1或者0,而正常情况下应该显示男或者女,接下来就需要对此问题进行修复
- 问题修复:使用jXLS提供的另一个指令<jx:if test=""></jx:if>,其作用是判断值,从而指定显示的内容
- 修改后的模板
<ignore_js_op>![]()
- 生成Excel文档的效果
<ignore_js_op>![]()
- 需求变更:在生成Excel文档的同时,计算出员工薪资总金额,以及平均值
- 若要完成该需求,只需要修改Excel模板,修改之后的模板
<ignore_js_op>![]()
- 生成Excel文档的效果
<ignore_js_op>![]()
- 更多免费技术资料可关注:annalin1203
- 若要完成该需求,只需要修改Excel模板,修改之后的模板

浙公网安备 33010602011771号