杰瑞科技汇

Java如何高效插入Excel数据?

Java操作Excel插入数据指南

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

Java如何高效插入Excel数据?-图1
(图片来源网络,侵删)

使用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);

注意事项

  1. 内存管理:处理大型Excel文件时,POI可能会占用大量内存,EasyExcel在这方面表现更好
  2. 文件格式.xls使用HSSFWorkbook,.xlsx使用XSSFWorkbook
  3. 异常处理:确保正确关闭所有资源,使用try-with-resources语句
  4. 性能优化:对于大数据量,考虑使用SXSSFWorkbook(POI的流式API)或EasyExcel的写入功能

选择哪种方法取决于你的具体需求,如果只是简单的Excel操作,POI足够了;如果处理大数据量,EasyExcel是更好的选择。

分享:
扫描分享到社交APP
上一篇
下一篇