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