首页 > 编程语言 >Java小白翻身-Excel教程

Java小白翻身-Excel教程

时间:2022-10-31 13:36:27浏览次数:62  
标签:customer Customer 教程 Java saveToExcel writer Excel 我们


嗯,先让我们捋一捋思路吧~

private static boolean saveCustomer(ICustomerService customerService) {
//1、读取文本,获取客户资料
List<String> props = customerService.loadCustomerFormTxt("D:/customer.txt");
//2、解析客户资料到客户对象
Customer customer = customerService.fillCustomer(props);
//3、直接将客户对象保存到Excel中(暂时先不做批量入库了)
boolean isSuccess = customerService.saveToExcel(Application.cstList,"D:/customer.xls");

Application.cstList.add(customer);

return isSuccess;
}

首先,我们捋一捋思路,顺便复习一下之前保存用户的方法。之前的做法是,如果用户选择【客户登记入库】,程序则去读取D盘的customer.txt文件,然后转换里面的信息到cstList里面。

Application.cstList.add(customer);

这个是方便我们看到刚刚保存的数据,现在我们的难点在于,如何实现将客户对象保存到Excel中?

在CustomerServiceImpl中,我们的saveToExcel方法这是一个壳子,实际上并没有实现保存逻辑呢。

@Override
public boolean saveToExcel(TuziLinkedList customers, String excelPath) {

customers.forEachRemaining(new Consumer() {
@Override
public void accept(Object o) {
//把Object类型的o对象,强制转化成Customer类型
Customer cst = (Customer) o;
System.out.println(cst.getName() + "已经成功保存到Excel!");
}
});

return true;
}

这个时候,我们就发现问题了,就是saveToExcel这个方法,接收的参数是customers,是TuziLinkedList类型的。这就表明,需要的是一个容器,这个容器里面可能有多个客户对象啊,所以我们的注释写的就有点问题。具体为啥这样写,好像是我打算做成单个入库的,不做批量入库。

似乎是我忘记改了,咳咳… … 小细节,小细节,不要在意。。。

我们得重新设计一下saveToExcel这个方法,修改其参数为当前的客户对象。

Java小白翻身-Excel教程_java

Java小白翻身-Excel教程_ide_02

Java小白翻身-Excel教程_ide_03

然后修改这里:

Java小白翻身-Excel教程_ide_04

Java小白翻身-Excel教程_ide_05

然后就发现,这个方法报错了,因为我们刚刚把容器对象改成了单个客户对象。注意,虽然现在参数的名字还叫做customers,但是注意看它左边的类型,已经是Customer,而不是之前的TuziLinkedList了。为了安全起见,不造成混淆,我们也把customers改成customer。(接口里面也要改)

Java小白翻身-Excel教程_java_06

Java小白翻身-Excel教程_java_07

再回到实现类,发现这一块报错了。

Java小白翻身-Excel教程_ide_08

我们在上一节的【接口】章节中,讲解了这个属于 new一个匿名实现类 ,它是java中的一个高级写法。我们现在为了项目进度,只打算做单个保存,不做批量保存,就暂时用不到了。但是,这种写法还是非常不错的,绝对的装逼利器,值得大家好好品鉴和体会(偷偷告诉你,在很多框架里面,到处都是这种写法。如果再弄得逼格高点,就是所谓的Lamda表达式了,这个暂且不谈)。

好不容易写出来,删掉可惜,我们就注释掉吧。

@Override
public boolean saveToExcel(Customer customer, String excelPath) {

// customers.forEachRemaining(new Consumer() {
// @Override
// public void accept(Object o) {
// //把Object类型的o对象,强制转化成Customer类型
// Customer cst = (Customer) o;
// System.out.println(cst.getName() + "已经成功保存到Excel!");
// }
// });

return true;
}

没错,还是要用到Hutool,没想到吧。Hutool封装了POI(一种java跟office打交道的lib库),把Excel的生成变得格外简单了。

Java小白翻身-Excel教程_数据_09

为了方便大家练习,我会直接放出整个项目的下载地址,也包括了这两个jar包。

@Override
public boolean saveToExcel(Customer customer, String excelPath) {

//通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter(excelPath);

//定义标题
writer.addHeaderAlias("name", "客户姓名");
writer.addHeaderAlias("sex", "性别");
writer.addHeaderAlias("birthDate", "生日");
writer.addHeaderAlias("phoneNumber", "电话号码");

// 合并单元格后的标题行,使用默认标题样式
writer.merge(4, "客户信息");

//将customer放入一个List
List list = new ArrayList();
list.add(customer);

writer.write(list);
writer.flush();

return true;
}

注释都写的很清楚了,其中用到了ArrayList,这是jdk给我们提供的一种List数据结构,用法就和我们的TuziLinkedList差不多,现在我们只需要能看懂就行。
简单演示一下目前的操作流程

这个小得不能再小的项目,当然还存在着很多的问题。比如,每次只能保存一个用户,而且还需要把用户信息写在一个txt文档里面,这样也太奇葩了吧!

哈哈,没错,不过软件本来就是需要不断更新与迭代的。诚然,我相信没有一家软件公司会把数据全部存到Excel里面吧,那样根本就没法维护。实际上,后面我们会学习到一个叫做数据库的东西。接下来的几个章节,我们就要回到知识点的讲解中。

最后,说一下,为什么我们要做这样的一个小小项目呢?那是因为,我希望通过这个小案例,让初学Java的人,一开始面对的不是冷冰冰的知识点,背书本,而是能用最快的速度,学会用Java做一个有使用价值的东西出来。

这个项目虽然还非常不合理,但是,它用到了很多知识点。比如接口,IO,生成Excel(虽然Hutool帮了大忙,但是我们还是完成了最基本的功能)。

至于生成Excel的部分,大家无需过多地去介意。因为目前是肯定不合理的,因为用户会很多,不可能每次都去重新生成一个Excel,而应该每次获取到Excel里面所有的用户数据,然后新增一个用户,再重新写一个excel出去。

可即便是这样,效率还是太低。

什么时候用Excel,在企业里面,其实也就是生成个报表啥的,一次性的。比如你有100条数据,就生成包含100条数据的excel文档。没有把excel当成数据库的。

这个项目也仅仅是带着大家看一看,Java能干的事情还是有点多的。哪怕,我们只学了最最简单的面向对象,接口,还有如何定义和调用方法等知识点。

不过话又说回来,学习哪有一蹴而就的呢?我认为一开始能否建立起自信心是最重要的,不管怎么说,目前我们用最简单的Java代码,做了一个能跑的程序的出来,还能读取txt,生成Excel文档,这就很ok了。

至于后面,肯定是要快速地进入到web的学习,因为现在你学java,去找工作,基本都是web。

​https://www.bilibili.com/video/BV1j5411N7q3?p=2​


标签:customer,Customer,教程,Java,saveToExcel,writer,Excel,我们
From: https://blog.51cto.com/u_10957019/5809353

相关文章

  • Java小白翻身教程-链表结构与编译大法(3)
    D盘下面的tool文件夹已经有三个工具类了(其实是两个,CustNode是为了TuziLinkedList服务的),我们这一节来进行打包,这样的好处就是不用每次编译都把tool里面的类也带上了。步骤1......
  • javascript百炼成仙 第一章 掌握JavaScript基础 1.13 语惊四座
    “叶小凡,现在你把这道题解释一下吧。”林元青看向叶小凡,稳重但不缺威严地说到。“是。”弟子面朝着林元青作揖,然后抬起兄,缓缓到来。“这道题看似复杂,但只要一步一步细细分......
  • javascript百炼成仙 第一章 掌握JavaScript基础 1.2直接量
    叶小凡的住处被安排在青山院西北角的一个房间里,虽不宽敞,倒也干净。叶小凡两眼露出振奋的眼神,随便吃了点乡亲们准备的干粮后,就立刻开始打坐修行。编程之修,重在积累,而非资质。......
  • javascript百炼成仙 第一章 掌握JavaScript基础1.8 对象的取值
    “小娃娃,我现在问你,如果我事先不知道对象的某个属性叫什么,那又该怎么访问对象中对应这个属性的值呢?”叶老笑呵呵地问到。“什么什么,事先都不知道对象的属性名称,那怎么可能访......
  • 【❤️Java入门超简单❤️】JavaSE初级教程整合篇,全部手敲,每一节代码都验证可行(建议新人收
    大家好,我是spring小杨,是一位java司机,喜欢撸代码,可技术交流!我对自己编写的Java初级教程做了一个整理,每一节都是我用心编写而成。该教程和我的学习网站:java18.cn是同步的。终......
  • Java基础整理04
    EXERCISETest04Object超类、基类,所有类的直接或间接父类,位于继承树的最顶层。任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。Objec......
  • hadoop的java.lang.InterruptedException
     运行hadoop的时候,爆出来java.lang.InterruptedException:[root@node-1text]#hadoopjarhadoop-04-1.0-SNAPSHOT.jar19/07/2120:41:48INFOclient.RMProxy:Connecting......
  • 【Java】接口多态练习题
    设计一个USB接口,USB接口拥有启动和停止方法,网卡类实现USB接口,重写实现网卡启动停止方法声卡类实现USB接口,重写实现声卡启动和停止方法,主板类拥有使用USB接口的方法。方法......
  • java如何引用外部类(文末有视频讲解)
    导航​​步骤1全限定名​​​​步骤2编译,报错,欧耶~​​​​步骤3访问权限修饰符​​​​步骤4编译和运行Demo.java​​​​步骤5导入包​​​​步骤6导入静态方......
  • java访问权限讲解(文末有视频教程)
    导航​​步骤1图解​​​​步骤2public对于class是最常用的​​​​步骤3protected多用于继承的情况​​​​步骤4private一般就是用于属性​​​​步骤5企业中的......