【黑马程序员济南中心】使用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工程,并添加依赖

net.sf.jxlsjxls-core1.0.6junitjunit4.12org.slf4jslf4j-log4j121.7.12

步骤二:编写员工信息实体类

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名员工的信息

public class EmployeeDao {

/**

* 模拟查询数据库得到100名员工的信息

* @return :100名员工的信息

*/

public ListfindEmployees(){ Listlist = new ArrayList();


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

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

步骤五:编写导出Excel文档的代码

public class ExportExcel { public void expExcelWithJxls() throws Exception{ //1、获取导出文档中的数据,存放到一个Map集合中 

 EmployeeDao empDao = new EmployeeDao(); 

 Listemployees = empDao.findEmployees(); Mapmap = new HashMap();

                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);

        }

}

步骤六:编写测试程序,测试导出员工信息的文档

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提供的另一个指令,其作用是判断值,从而指定显示的内容

修改后的模板
生成Excel文档的效果

需求变更:在生成Excel文档的同时,计算出员工薪资总金额,以及平均值

若要完成该需求,只需要修改Excel模板,修改之后的模板


生成Excel文档的效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335