gpt4 book ai didi

java - 如何比较具有 500,000k 行的单列两个 Excel 文件

转载 作者:行者123 更新时间:2023-12-01 18:02:06 24 4
gpt4 key购买 nike

目标:比较两个 Excel 文件,每个 Excel 文件只有一列,但有 50 万行。我只是想看看两个 Excel 之间不常见的值。

列:仅 1行数:500,000

语言:JAVA

到目前为止我尝试过的:

  1. 使用 Apache POI(请参见下面的程序 1)
  2. ArrayList(请参见下面的程序2)
  3. 我尝试了一些网站,我们可以在其中上传多个 Excel 以查看差异 ( https://www.textcompare.org/excel/ )
  4. 我将堆大小增加到 256 到 2048m,但对我不起作用。

(我的程序适用于少量数据或少量记录)

以上努力对我来说没有用。

程序 1::

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public static ExcelReader excel3 = null;
public static ExcelReader excel2 = null;

excel3 = new ExcelReader("C:\\Users\\DataExcelCompare\\Book3.xlsx");
excel2 = new ExcelReader("C:\\Users\\DataExcelCompare\\Book2.xlsx");

File f3 = new File("C:\\Users\\DataExcelCompare\\Book3.xlsx");
FileInputStream fi3 = new FileInputStream(f3);
Workbook workbook3 = WorkbookFactory.create(fi3);
Sheet sheet3 = workbook3.getSheet("book3");

File f2 = new File("C:\\Users\\DataExcelCompare\\Book2.xlsx");
FileInputStream fi2 = new FileInputStream(f2);
Workbook workbook2 = WorkbookFactory.create(fi2);
Sheet sheet2 = workbook2.getSheet("book2");

int firstRow2 = sheet2.getFirstRowNum();
int lastRow2 = sheet2.getLastRowNum();

int firstRow3 = sheet3.getFirstRowNum();
int lastRow3 = sheet3.getLastRowNum();

for(int i=firstRow2; i <= lastRow2; i++) {
for(int j=firstRow3; j <= lastRow3; j++) {

String ele2 = sheet2.getRow(i).getCell(0).toString().trim();
String ele3 = sheet3.getRow(j).getCell(0).toString().trim() ;

if(ele2.toString() != ele3.toString())
{
// some operation
}
else
{
// some operation
}

}

程序2::

ArrayList<String> listOne = new ArrayList<String>();
ArrayList<String> listTwo =new ArrayList<String>();

for(int i=firstRow2; i <= lastRow2; i++) {
listOne.add(sheet2.getRow(i).getCell(0).toString().trim());
System.out.println("added: " + sheet2.getRow(i).getCell(0).toString().trim());
}

for(int j=firstRow3; j <= lastRow3; j++) {
listTwo.add(sheet3.getRow(j).getCell(0).toString().trim());
System.out.println("added: " + sheet3.getRow(j).getCell(0).toString().trim());
}

listTwo.removeAll(listOne);

System.out.println("list two : " + listTwo);

最佳答案

使用 Apache POI 读取 Excel 文件会占用大量内存。

处理行数少于 50,000 行的 Excel 文件时出现内存错误并不罕见(更不用说 500,000 x 2)。

这永远不会起作用。

查找第 3 方程序,在这些 Excel 文件到达您的 Java 程序之前将其转换为 .txt。

关于java - 如何比较具有 500,000k 行的单列两个 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60611668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com