Цель: сравнить два файла Excel, каждый из которых имеет только один столбец, но содержит полмиллиона строк. Я просто хочу увидеть необычные значения между двумя исключениями.
Колонка: только 1 Строка: 500 000
Язык: JAVA
Что я пробовал до сих пор:
- Apache POI используется (см. ниже программу-1)
- ArrayList (см. ниже программу-2)
- Я пробовал некоторые сайты, где мы можем загрузить кратные Excel, чтобы увидеть различия (https://www.textcompare.org/excel/)
- Я увеличил размер кучи до 256 до 2048 м, но у меня не работает.
(Мои программы работают хорошо для небольшого набора данных или нескольких записей)
вышеуказанные усилия не сработали для меня.
программа-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);