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目录下
      <ignore_js_op>

           说明:在模板中使用jxls的表达式`<jx:forEach items=”” var=”” ></jx:forEach>`,js:forEach的作用类似于jstl中的c:forEach,用来遍历集合,items的值要和步骤五中的map集合中的key值一致,var值是每次遍历得到的元素,取元素中的值使用 ${元素的名称} 格式的表达式。

    • 步骤五:编写导出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文档的效果
    <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

版权声明:本文为zhuxiaopijingjing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhuxiaopijingjing/p/12915274.html