poi操作Excel在原有的数据里插入一条新的数据

 一、POI概述

  Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

   结构:

  • HSSF --提供读写Microsoft Excel格式档案的功能。
  • XSSF --提供读写Microsoft Excel OOXML格式档案的功能。
  • HWPF --提供读写Microsoft Word格式档案的功能。
  • HSLF --提供读写Microsoft PowerPoint格式档案的功能。
  • HDGF --提供读写Microsoft Visio格式档案的功能。

 

使用需要引入依赖:

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.17</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-scratchpad</artifactId>
	<version>3.17</version>
</dependency>
	<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.17</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml-schemas</artifactId>
	<version>3.17</version>
</dependency>

 二、代码部分

首先创建一个Excel的工具类

package com.Utils;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;

import java.io.*;

/**
 * @Author magic
 * @Date 2019/11/21 14:55
 */
public class PoiUtils {
    /**
     * readworkbook.
     */
    public static Workbook readworkbook;
    /**
     * readFilepath.
     */
    private static String readFilePath;
    /**
     * excel xls.
     */
    public static final String OFFICE_EXCEL_XLS = "xls";
    /**
     * excel xlsx.
     */
    public static final String OFFICE_EXCEL_XLSX = "xlsx";
    private PoiUtils() {

    }
    /**
     * 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用Apache POI库来实现这个功能,下面是一个简单的示例代码: ```java import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.ArrayList; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.streaming.SXSSFWorkbook; public class ExcelExporter { private static final int MAX_ROWS_PER_SHEET = 10000; public void exportToExcel(List<MyData> dataList, String filePath) throws IOException { // Create workbook SXSSFWorkbook workbook = new SXSSFWorkbook(); workbook.setCompressTempFiles(true); // Split data into sheets List<List<MyData>> sheetsData = splitDataIntoSheets(dataList); // Export each sheet for (int i = 0; i < sheetsData.size(); i++) { List<MyData> sheetData = sheetsData.get(i); String sheetName = "Sheet" + (i + 1); exportToSheet(sheetData, sheetName, workbook); } // Save the workbook try (FileOutputStream outputStream = new FileOutputStream(filePath)) { workbook.write(outputStream); } } private List<List<MyData>> splitDataIntoSheets(List<MyData> dataList) { List<List<MyData>> sheetsData = new ArrayList<>(); int numOfSheets = (int) Math.ceil((double) dataList.size() / MAX_ROWS_PER_SHEET); for (int i = 0; i < numOfSheets; i++) { int startIndex = i * MAX_ROWS_PER_SHEET; int endIndex = Math.min(startIndex + MAX_ROWS_PER_SHEET, dataList.size()); List<MyData> sheetData = dataList.subList(startIndex, endIndex); sheetsData.add(sheetData); } return sheetsData; } private void exportToSheet(List<MyData> dataList, String sheetName, SXSSFWorkbook workbook) { // Create sheet SXSSFSheet sheet = workbook.createSheet(sheetName); sheet.trackAllColumnsForAutoSizing(); // Create header row Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Column1"); headerRow.createCell(1).setCellValue("Column2"); headerRow.createCell(2).setCellValue("Column3"); // Populate data rows for (int i = 0; i < dataList.size(); i++) { MyData data = dataList.get(i); Row dataRow = sheet.createRow(i + 1); dataRow.createCell(0).setCellValue(data.getColumn1()); dataRow.createCell(1).setCellValue(data.getColumn2()); dataRow.createCell(2).setCellValue(data.getColumn3()); } // Autosize columns for (int i = 0; i < 3; i++) { sheet.autoSizeColumn(i); } } } ``` 这个示例代码使用了SXSSFWorkbook来支持大量数据的导出。它会将数据按照每个sheet最多10000条的规则进行分割,然后在每个sheet面写入数据。最后将所有sheet写入到一个文件面。 你需要提供一个MyData类,它包含了你要导出的数据的字段。在示例代码面,它包含了三个字段:column1、column2和column3。 你需要创建一个ExcelExporter实例,并调用它的exportToExcel方法来执行导出操作。它需要两个参数:一个是你的数据列表,另一个是导出文件的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值