java操作Excel简单入门
简介
在项目中使用到Excel是很常见的,如批量导入数据,批量导出数据。这里我们使用Apache的开源项目POI来操作Excel。官网
添加依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
创建Excel文件
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
@Accessors(chain = true)
public class Person {
private String username;
private String gender;
private String address;
}
定义用户模型
public class Client {
public static void main(String[] args) throws Exception {
List<Person> personList = Arrays.asList(
new Person().setUsername("李四").setGender("男").setAddress("北京"),
new Person().setUsername("小王").setGender("女").setAddress("上海"));
//工作簿 表示一个excel文件
Workbook wb = new SXSSFWorkbook();
//一个表格
Sheet sheet = wb.createSheet();
//创建标题行
Row row = sheet.createRow(0);
//1个单元格
Cell cell = row.createCell(0);
cell.setCellValue("用户名");
cell = row.createCell(1);
cell.setCellValue("性别");
cell = row.createCell(2);
cell.setCellValue("地址");
AtomicInteger rowIndex = new AtomicInteger(1);
for (Person person : personList) {
//创建数据行
row = sheet.createRow(rowIndex.getAndIncrement());
row.createCell(0).setCellValue(person.getUsername());
row.createCell(1).setCellValue(person.getGender());
row.createCell(2).setCellValue(person.getAddress());
}
wb.write(new FileOutputStream("D:\\person.xlsx"));
}
}
生成的Excel如下
Workbook在POI中有3种实现,
- HSSFWorkbook,适用于2003及之前的版本,后缀为.xls,行数最多为65536行
- XSSFWorkbook,适用于2007及之后的版本,后缀为.xlsx,行数最多为1048576行,可能出现OutOfMemoryError错误
- SXSSFWorkbook,适用于大型Excel文件的操作,不会造成内存溢出,基本原理就是空间换时间,将数据保存到硬盘中
可以看到两种版本的行大小和列大小
可以看到,在创建行对象之前都会校验最大行数。
SXSSFWorkbook会使用很低的内存,这是因为超过100行的数据都会保存到临时文件中
临时文件中内容为
读取Excel文件
public class Client {
public static void main(String[] args) throws Exception {
Workbook wb = new XSSFWorkbook(new FileInputStream("D:\\person.xlsx"));
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
//过滤标题行
rowIterator.next();
List<Person> personList = new ArrayList<>();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Person person = new Person();
Cell cell;
cell = row.getCell(0);
if (cell != null) {
person.setUsername(cell.getStringCellValue());
}
cell = row.getCell(1);
if (cell != null) {
person.setGender(cell.getStringCellValue());
}
cell = row.getCell(2);
if (cell != null) {
person.setAddress(cell.getStringCellValue());
}
personList.add(person);
}
System.out.println(personList);
}
}
可以看到,使用POI操作Excel还是很简单的,关于更加复杂的Excel功能,请读者自行研究。