Java操作Excel插入数据指南
在Java中操作Excel并插入数据,有多种库可以使用,其中最常用的是Apache POI和EasyExcel,下面我将分别介绍这两种方法。

使用Apache POI插入数据
Apache POI是Java操作Office文档最常用的库,支持Excel的读写操作。
Maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
示例代码:插入数据到Excel
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelInsertData {
public static void main(String[] args) {
// 创建新的Excel工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("数据表");
// 创建标题行
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("年龄");
headerRow.createCell(2).setCellValue("性别");
// 插入数据行
Row dataRow1 = sheet.createRow(1);
dataRow1.createCell(0).setCellValue("张三");
dataRow1.createCell(1).setCellValue(25);
dataRow1.createCell(2).setCellValue("男");
Row dataRow2 = sheet.createRow(2);
dataRow2.createCell(0).setCellValue("李四");
dataRow2.createCell(1).setCellValue(30);
dataRow2.createCell(2).setCellValue("女");
// 自动调整列宽
for (int i = 0; i < 3; i++) {
sheet.autoSizeColumn(i);
}
// 写入文件
try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
workbook.write(outputStream);
System.out.println("Excel文件已成功创建并写入数据");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用EasyExcel插入数据
EasyExcel是阿里巴巴开源的Excel处理工具,具有内存效率高的优点,适合处理大数据量。
Maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
示例代码:插入数据到Excel
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelInsertData {
public static void main(String[] args) {
// 准备数据
List<User> dataList = new ArrayList<>();
dataList.add(new User("张三", 25, "男"));
dataList.add(new User("李四", 30, "女"));
// 写入Excel
String fileName = "easyexcel_output.xlsx";
// 创建ExcelWriter
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
// 创建工作表
WriteSheet writeSheet = EasyExcel.writerSheet("用户数据").build();
// 创建表头
List<List<String>> head = new ArrayList<>();
List<String> head0 = new ArrayList<>();
head0.add("姓名");
List<String> head1 = new ArrayList<>();
head1.add("年龄");
List<String> head2 = new ArrayList<>();
head2.add("性别");
head.add(head0);
head.add(head1);
head.add(head2);
// 写入数据
excelWriter.write(dataList, writeSheet);
// 关闭流
excelWriter.finish();
System.out.println("EasyExcel文件已成功创建并写入数据");
}
// 数据模型
public static class User {
private String name;
private Integer age;
private String gender;
public User(String name, Integer age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// getters and setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
public String getGender() { return gender; }
public void setGender(String gender) { this.gender = gender; }
}
}
其他常用操作
插入图片到Excel
// 使用Apache POI插入图片
InputStream inputStream = new FileInputStream("example.png");
byte[] bytes = IOUtils.toByteArray(inputStream);
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
Drawing<?> drawing = sheet.createDrawingPatriarch();
CreationHelper helper = workbook.getCreationHelper();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(0); // 列索引
anchor.setRow1(0); // 行索引
Picture pict = drawing.createPicture(anchor, pictureIdx);
pict.resize();
设置单元格样式
// 创建单元格样式
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setFontHeightInPoints((short) 12);
font.setBold(true);
style.setFont(font);
style.setAlignment(HorizontalAlignment.CENTER);
// 应用样式
Cell cell = row.createCell(0);
cell.setCellValue("标题");
cell.setCellStyle(style);
注意事项
- 内存管理:处理大型Excel文件时,POI可能会占用大量内存,EasyExcel在这方面表现更好
- 文件格式:
.xls使用HSSFWorkbook,.xlsx使用XSSFWorkbook - 异常处理:确保正确关闭所有资源,使用try-with-resources语句
- 性能优化:对于大数据量,考虑使用SXSSFWorkbook(POI的流式API)或EasyExcel的写入功能
选择哪种方法取决于你的具体需求,如果只是简单的Excel操作,POI足够了;如果处理大数据量,EasyExcel是更好的选择。
