0
点赞
收藏
分享

微信扫一扫

java自动化电子表格处理【Excel文件生成与读取】

左手梦圆 2022-03-11 阅读 49

java自动化电子表格处理【Excel文件生成与读取】

一、先定义一个记录出出去信息的类

package com.zcl.excel;

public class Person {
    /**
     * 名称
     */
    private String name;
    /**
     * 城市
     */
    private String city;
    /**
     * 手机号
     */
    private String cellPhone;

    /**
     * 无参构造
     */
    public Person() {
    }

    /**
     * 有参构造
     * @param name
     * @param city
     * @param cellPhone
     */
    public Person(String name, String city, String cellPhone) {
        this.name = name;
        this.city = city;
        this.cellPhone = cellPhone;
    }

    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 getCellPhone() {
        return cellPhone;
    }

    public void setCellPhone(String cellPhone) {
        this.cellPhone = cellPhone;
    }
}

二、文件的写出

生成数据的方法

Faker faker = new Faker();

String name = faker.name().fullName(); // Miss Samanta Schmidt
String firstName = faker.name().firstName(); // Emory
String lastName = faker.name().lastName(); // Barton

String streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449

faker生成10条数据

//地区设置为中国
        Faker faker = new Faker(Locale.CHINA);
        //名称
        String name = faker.name().fullName();
        System.out.println(name);
        //街道地址
        String city = faker.address().city();
        System.out.println(city);
        //手机号码
        PhoneNumber phoneNumber = faker.phoneNumber();
        System.out.println(phoneNumber.cellPhone());
        List<Person> personList = Stream.generate(() -> new Person(faker.name().fullName(), faker.address().city(), faker.phoneNumber().cellPhone()))
                .limit(10)
                .collect(Collectors.toList());

三、工作簿的创建

package com.zcl.excel;


import com.github.javafaker.Faker;
import com.github.javafaker.PhoneNumber;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/*
    目标:使用程序完成excle文件创建
 */
public class ExcelWriter {
    public static void main(String[] args) throws Exception {
        ExcelWriter excelWriter = new ExcelWriter();
        //地区设置为中国
        Faker faker = new Faker(Locale.CHINA);
        //生成10个随机人物信息
        List<Person> personList = Stream.generate(() -> new Person(faker.name().fullName(), faker.address().city(), faker.phoneNumber().cellPhone()))
                .limit(100)
                .collect(Collectors.toList());
        excelWriter.fileExcel(personList,new File("persion.xlsx"));
        /*//创建一个工作薄
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
        //创建一个sheet,名字为person
        xssfWorkbook.createSheet("persion");
        XSSFSheet sheet = xssfWorkbook.getSheet("persion");
        //创建第一行,行的下标从0开始
        XSSFRow row = sheet.createRow(0);
        //设置第一行的第一列为姓名,也就是设置表头的内容
        row.createCell(0).setCellValue("姓名");
        //设置第一行的第二列为城市
        row.createCell(1).setCellValue("城市");
        //设置第一行的第三列为手机号
        row.createCell(2).setCellValue("手机号");

        Faker faker = new Faker(Locale.CHINA);
        //生成10个随机人物信息
        List<Person> personList = Stream.generate(() -> new Person(faker.name().fullName(), faker.address().city(), faker.phoneNumber().cellPhone()))
                .limit(100)
                .collect(Collectors.toList());
        //将人物数据写入表格
        for (int i = 0; i < personList.size() ; i++) {
            XSSFRow sheetRow = sheet.createRow(i+1);
            Person person = personList.get(i);
            sheetRow.createCell(0).setCellValue(person.getName());
            sheetRow.createCell(1).setCellValue(person.getCity());
            sheetRow.createCell(2).setCellValue(person.getCellPhone());
        }
        //创建一个文件,用于将表格内容输出到该文件中
        File file = new File("persion.xlsx");
        xssfWorkbook.write(new FileOutputStream(file));*/
    }

    /**
     * 填充Excel数据
     * @param data 用户数据列表
     * @param desFile // 目标位置
     */
    public void fileExcel(List<Person> data, File desFile) throws Exception {
        // 创建工作簿对象
        XSSFWorkbook xssfWorkbo = new XSSFWorkbook();
        // 创建一个sheet
        XSSFSheet sheet = xssfWorkbo.createSheet("用户");
        // XSSFSheet sheet = xssfWorkbo.getSheet("persion");
        // 创建行
        XSSFRow row = sheet.createRow(0);
        // 先有行才有列
        row.createCell(0).setCellValue("名称");
        row.createCell(1).setCellValue("城市");
        row.createCell(2).setCellValue("手机号码");
        // 遍历persons对象
        for (int i = 0; i < data.size(); i++) {
            // 开始创建行,第二行开始,第一行是表头已经创建了
            XSSFRow r = sheet.createRow(i + 1);
            // 给每列进行赋值
            r.createCell(0).setCellValue(data.get(i).getName());
            r.createCell(1).setCellValue(data.get(i).getCity());
            r.createCell(2).setCellValue(data.get(i).getCellPhone());

        }
        // 生成文件的位置
        FileOutputStream fileOutputStream = new FileOutputStream(desFile);
        xssfWorkbo.write(fileOutputStream); // 生成文件
        fileOutputStream.close(); // 释放资源
        xssfWorkbo.close(); // 释放资源
    }
}

运行如果报错

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...

文件可运行成功并可以生成xlsx,报错的原因是因为没有引入apache-log4j-2.17.2-bin的日志文件包,导致的

四、Excel文件的读取

package com.zcl.excel;

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;

/**
 *  目标:学会用程序读取Excelw文件数据
 */
public class ExcelReader {
    public static void main(String[] args) throws Exception {
        readExcel(new File("F:\\2022C4java认证\\day16 Excel\\code\\persion.xlsx"));
    }

    /**
     * 读取Excel文件操作
     */
    public static void readExcel(File sourceFile) throws Exception {
        // 创建工作簿
        XSSFWorkbook xSSFWorkbook = new XSSFWorkbook(new FileInputStream(sourceFile));
        // 通过下表拿到sheet页面信息
        XSSFSheet sheet = xSSFWorkbook.getSheetAt(0);
        // 将所有信息读取出来[迭代器]
        Iterator<Row> rowIterator = sheet.rowIterator();
        // 通过迭代器把所有的行迭代出来
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next(); // 获取到行
            System.out.println(row.getCell(0).getStringCellValue()+" "+
                            row.getCell(1).getStringCellValue()+" "+
                            row.getCell(2).getStringCellValue());
        }
    }
}

举报

相关推荐

0 条评论