Java操作Excel表格入门实例

算法学累了 换个知识学一下 这次算是复习

首先 操作表格需要用到第三方的库 Java本身没有

需要引入类库

如果你会使用Maven 那么直接导入刷新就行

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0.0</version>
</dependency>

最好的是poi和poi-ooxml一起导入 免得后面报错再导入

如果你不会使用Maven,那么就使用创建lib目录然后添加到项目的外部库

网址:Apache POI - the Java API for Microsoft Documents 

然后点击图上圈着的

 同上

 注意:压缩包下载后 里面会有几个文件夹 里面的所有jar包都有拷贝出来到你的lib文件夹中,然后选中所有加到外部库里

对excel的了解

现在想要使用它就必须要有一定知识了解

                                                                                                                                                           

首先我们应该要具备一些常识,一提到电子表格大家首先想到的是微软Office中Excel软件默认保存的数据文件格式(xls/xlsx),但实际上常用的表格数据格式远不止如此。

  • XLS/XLSX:Office中Excel默认数据格式,XLS为老版本文件,Office2007以后版本采用XLSX格式文件。

  • XLSM/XLSB:启用宏的工作簿,XLSM为标准XLSX增加了宏命令与VBA的支持,XLSB为二进制格式保存格式,体积更小。

  • Numbers:苹果iWork套件中的电子表格软件默认保存格式

  • CSV/TSV:以纯文本形式存储的表格数据
    其中XLS/XLSX和XLSM/XLSB都是出自微软,由于office数据协议的开放,目前XLS/XLSX已经成为了电子表格软件的实际数据标准,包括各种网页插件,客户端插件和openoffice软件,都能很好的支持XLS/XLSX文件;至于XLSM/XLSB以及苹果家的Numbers,使用了大量自家支持的技术,因此对于需要批量处理数据的办公场景(编写自动化脚本的场景)兼容性不是太好,因此如果需要用脚本自动化处理的任务,尽可能将表格文件另存为XLS或者XLSX格式。xls最大支持256列,最大65536行,XLSX可以存储16384列,1048576行数据。
    CSV/TSV是使用纯文本方式记录数据,这是兼容方式最好的表格文件,几乎所有的编程语言和表格软件全部都能很好的支持,即便没有第三方库,程序员手动编写代码读取难度也不大,并且作为纯文本,没有文件大小限制,即便是放在大数据环境下,无论数据分片存储还是分布式计算都非常容易,因此专业工程师使用表格数据,首选CSV或TSV。

电子表格的结构和术语

要想用程序脚本操作表格,我们必须对表格的结构了如指掌。一个表格,通常由以下这些部分组成
WorkBook(工作簿):很多windows用户习惯在桌面新建一个XLSX表格文件,通常一个文档就是一个工作簿。
Sheet(工作表):一个XLSX中可以包含多张表工具表,Excel软件中,通过窗口底部的选项卡可以进行工作表的切换。
Column(列):表格中竖着排成一队的数据称为一列
Row(行):表格中排成横排的数据称为一行,工程师有时也会把一行的数据称为Record(记录)。
Cell(单元格):表格中填写数据的最小格。
Index(索引/序号):通常表格中每一行都有一个序号,来记录当前Record在表格中的位置。
Title(标题):表格中的每一列都可以有自己的标题,一般表格只会针对每一列设置标题,标记行通常用序号比较多。

                                                                                                                                                           

实列

接下来是实列 具体的操作需要在实践中理解

首先 :我们做一个有姓名 城市 手机号码 属性的Person类

package changexcel;

public class Person {
//属性
    private String name;
    private String city;
    private String phonenumber;
//无参构造
    public Person() {
    }
//含参构造
    public Person(String name, String city, String phonenumber) {
        this.name = name;
        this.city = city;
        this.phonenumber = phonenumber;
    }
//设置set和get方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getPhonenumber() {
        return phonenumber;
    }

    public void setPhonenumber(String phonenumber) {
        this.phonenumber = phonenumber;
    }
}

然后现在创建一个CreateAndWriteIn类

package changexcel;

import com.github.javafaker.Faker;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CreateAndWriteIn {
    //声明一个集合后面存放Person对象
    static List<Person> list ;

    public static void main(String[] args) {
        //调用创建表格的方法
        new CreateAndWriteIn().createExcel();
        //制造虚假数据
        new CreateAndWriteIn().fakeDate();
        //读取创建好的表格 将虚假数据输入
        new CreateAndWriteIn().WriteInforInExcel();
    }
    //创建表格 并且把表头设置好
    public void createExcel(){
        //此处需要理解一个东西 一个表格是一个工作簿 里面有很多sheet可以用 可以理解为页
        XSSFWorkbook BOOK = new XSSFWorkbook();
        //创建页 并且命名为Person
        XSSFSheet person = BOOK.createSheet("Person");
        //创建第一行 第一行下标为0
        XSSFRow title = person.createRow(0);
        //在行的基础上创建单元格然后还要赋值
        title.createCell(0).setCellValue("姓名");
        title.createCell(1).setCellValue("城市");
        title.createCell(2).setCellValue("电话");
        //设置文件输出 如果此处看不懂还需要去学一下io流
        File file = new File("Person.xslx");
        try {
            //创建输出流
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            //把内容给到输出流
            BOOK.write(fileOutputStream);
            //不关闭就不能保存
            fileOutputStream.close();
            BOOK.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //这个方法是用来产生虚假数据  
    //关于虚假数据的产生文章最后说
    //关于Stream.generate()和()->这两个是属于Java8新特性 不谈 
    //总的来说 下面这个方法是用来创建虚假数据然后放到集合里去
    public void fakeDate(){
        Faker faker = new Faker(Locale.CHINA);
        list = Stream.generate(()->new Person(faker.name().fullName(),faker.address().city(),faker.phoneNumber().cellPhone())).limit(10).collect(Collectors.toList());
    }
    //下面这个方法是正点玩意
    public void WriteInforInExcel(){
        try {
            //拿到表格文件
            File file = new File("Person.xslx");
            //放到输入流里
            FileInputStream fileInputStream = new FileInputStream(file);
            //再转给XSSFWorkbook
            XSSFWorkbook Book = new XSSFWorkbook(fileInputStream);
            //拿到目标页 也就是第一页 下标为0
            XSSFSheet sheetAt = Book.getSheetAt(0);
            //循环拿集合里的数据去给到表格里
            for (int i = 0; i < list.size(); i++) {
                //每一次循环都要新创建行
                XSSFRow row = sheetAt.createRow(i + 1);
                //新的行还要创建单元格并且赋值
                row.createCell(0).setCellValue(list.get(i).getName());
                row.createCell(1).setCellValue(list.get(i).getCity());
                row.createCell(2).setCellValue(list.get(i).getPhonenumber());
            }
            //最后存放数据 把文件名给到输出流
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            //再把内容给到输出流对象
            Book.write(fileOutputStream);
            //然后就是关闭流 切记 不关闭流的话 内容都在内存中 不会真的输出出去
            //再最后需要注意的是流的关闭顺序 先开的流后关闭 后开的流先关闭
            fileOutputStream.close();
            Book.close();
            fileInputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

最后讲一讲虚假数据 

想要获取虚假数据需要用到第三方库 javafaker

同样的两个方法 要么maven 要么手动导入

官网地址如下
https://github.com/DiUS/java-faker

下载地址

https://github.com/DiUS/java-faker/zipball/master

下载下来是一个压缩包,只要解压,就能拿到jar包了

然后关于使用 点击这个链接吧

(1条消息) 使用javafaker制造假数据_evasnowind的专栏-CSDN博客_javafaker文档

学这个的目的是想做个App给我现在所在的部门 想让以后的干部少受点罪

最后祝我苏电越来越好!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这猪能飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值