Java之使用POI教你玩转Excel导入与导出
什么是POI
POI是一个Java开发的用于操作Microsoft Office格式文件的开源框架。POI可以读写文档、演示文稿、Excel文件等,并且支持多种文件格式。下面我们主要讲解POI在Java中如何操作Excel文件的导入与导出。
Excel文件的导入
准备工作
首先,我们需要在pom.xml
文件中添加POI依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
读取Excel文件
使用POI读取Excel文件的主要类是XSSFWorkbook
和XSSFSheet
。例如,下面的代码读取Excel文件中第一个Sheet页的所有单元格值:
try (InputStream is = new FileInputStream("example.xlsx")) {
XSSFWorkbook workbook = new XSSFWorkbook(is);
XSSFSheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
System.out.println(cell.getStringCellValue());
}
}
} catch (IOException e) {
e.printStackTrace();
}
上述代码中,我们首先通过FileInputStream
获取Excel文件输入流,然后使用XSSFWorkbook
解析Excel文件,再使用getSheetAt()
方法获取指定Sheet页,使用Row
和Cell
对象遍历每个单元格,最后输出单元格中的字符串值。
写入Excel文件
同样,使用POI写入Excel文件的主要类是XSSFWorkbook
和XSSFSheet
。例如,下面的代码创建一个新的Excel文件,并向其中写入数据:
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
for (int i = 0; i < 10; i++) {
Row row = sheet.createRow(i);
for (int j = 0; j < 10; j++) {
Cell cell = row.createCell(j);
cell.setCellValue("cell " + i + ", " + j);
}
}
try (FileOutputStream fos = new FileOutputStream("example.xlsx")) {
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
}
上述代码中,我们首先创建一个空的XSSFWorkbook
对象和一个名为Sheet1
的新Sheet页。然后,使用createRow()
方法创建10行,使用createCell()
方法创建10列,并使用setCellValue()
方法向每个单元格写入数据。最后,使用FileOutputStream
将XSSFWorkbook
对象写入到Excel文件中。
Excel文件的导出
准备工作
同样,我们需要在pom.xml
文件中添加POI依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
将数据导出至Excel文件
下面的代码将一个List对象中的数据导出至Excel文件:
List<User> users = userService.getUsers();
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Users");
int rowIndex = 0;
for (User user : users) {
Row row = sheet.createRow(rowIndex++);
row.createCell(0).setCellValue(user.getId());
row.createCell(1).setCellValue(user.getName());
row.createCell(2).setCellValue(user.getAge());
}
try (FileOutputStream fos = new FileOutputStream("users.xlsx")) {
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
}
上述代码中,我们首先获取一个List对象,里面存储了User对象的数据。然后,创建一个空的XSSFWorkbook
对象和一个名为Users
的新Sheet页。使用createRow()
方法创建每行,并使用createCell()
方法创建每个单元格,最后使用setCellValue()
方法将数据写入每个单元格。
示范
下面我们来看看读取和写入Excel文件的完整示例:
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ExcelUtils {
public static List<User> readUsersFromExcel(String filePath) {
List<User> users = new ArrayList<>();
try (InputStream is = new FileInputStream(filePath)) {
XSSFWorkbook workbook = new XSSFWorkbook(is);
XSSFSheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
User user = new User();
user.setId((int) row.getCell(0).getNumericCellValue());
user.setName(row.getCell(1).getStringCellValue());
user.setAge((int) row.getCell(2).getNumericCellValue());
users.add(user);
}
} catch (IOException e) {
e.printStackTrace();
}
return users;
}
public static void writeUsersToExcel(List<User> users, String filePath) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Users");
int rowIndex = 0;
for (User user : users) {
Row row = sheet.createRow(rowIndex++);
row.createCell(0).setCellValue(user.getId());
row.createCell(1).setCellValue(user.getName());
row.createCell(2).setCellValue(user.getAge());
}
try (FileOutputStream fos = new FileOutputStream(filePath)) {
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String filePath = "users.xlsx";
// 写入Excel文件
List<User> users = new ArrayList<>();
users.add(new User(1, "张三", 30));
users.add(new User(2, "李四", 35));
users.add(new User(3, "王五", 25));
writeUsersToExcel(users, filePath);
System.out.println("写入Excel文件成功");
// 读取Excel文件
List<User> readUsers = readUsersFromExcel(filePath);
System.out.println("读取到的用户信息如下:");
for (User user : readUsers) {
System.out.println(user);
}
}
}
上述代码中,我们定义了一个User
类用于存储用户信息。在main()
方法中,我们首先使用writeUsersToExcel()
方法将3个用户信息写入Excel文件中,然后使用readUsersFromExcel()
方法从文件中读取用户信息,并输出到控制台中。
结论
本文主要介绍了使用POI在Java中如何操作Excel文件的导入与导出,通过对POI的使用,我们可以快速方便地读取和写入Excel文件中的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之使用POI教你玩转Excel导入与导出 - Python技术站