Как сравнить два листа excel

У меня есть два файла excel, и мне нужно их сравнить.

Основной случай заключается в том, что пользователь загружает файл, вносит некоторые изменения и загружает его обратно. После этого система сравнивает их и показывает отчет о несоответствии.

Я использую POI Apache, и я пытаюсь понять, как отслеживать некоторые действия пользователя. Например, пользователь переименовывает все ячейки в строке, а затем перемещает его. Как отслеживать эти изменения?

Проблема в том, что если я сравню новый файл с его последней копией, похоже, что пользователь удалил одну строку и создал другую, вместо того чтобы переименовывать и перемещать ее.

Я прочитал, что Excel может отслеживать пользовательские изменения и может создавать журналы изменений, но я не нахожу никаких упоминаний об этой функции в POI. Это одна из идей, как решить эту проблему, но я думаю, что это не очень хорошо.

Итак, каков наилучший способ обработки этих действий пользователя?

В файле я сравниваю только первый столбец, удаляю эту строку

if (cell1.getColumnIndex() == 0) 

попробуйте изменить в соответствии с нашим требованием

 public class ReadWriteXLImple { static Boolean check = false; public static void main(String args[]) throws IOException { try { ArrayList arr1 = new ArrayList(); ArrayList arr2 = new ArrayList(); ArrayList arr3 = new ArrayList(); FileInputStream file1 = new FileInputStream(new File( "src\\file\\Book1.xls")); FileInputStream file2 = new FileInputStream(new File( "src\\file\\Book2.xls")); // Get the workbook instance for XLS file HSSFWorkbook workbook1 = new HSSFWorkbook(file1); HSSFWorkbook workbook2 = new HSSFWorkbook(file2); // Get first sheet from the workbook HSSFSheet sheet1 = workbook1.getSheetAt(0); HSSFSheet sheet2 = workbook2.getSheetAt(0); // Compare sheets // Get iterator to all the rows in current sheet1 Iterator<Row> rowItera`enter code here`tor1 = sheet1.iterator();`enter code here` Iterator<Row> rowIterator2 = sheet2.iterator(); while (rowIterator1.hasNext()) { Row row = rowIterator1.next(); // For each row, iterate through all the columns Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); // This is for read only one column from excel if (cell.getColumnIndex() == 0) { // Check the cell type and format accordingly switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue()); arr1.add(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_STRING: arr1.add(cell.getStringCellValue()); System.out.print(cell.getStringCellValue()); break; case Cell.CELL_TYPE_BOOLEAN: arr1.add(cell.getBooleanCellValue()); System.out.print(cell.getBooleanCellValue()); break; } } } System.out.println(" "); } file1.close(); System.out.println("-----------------------------------"); // For retrive the second excel data while (rowIterator2.hasNext()) { Row row1 = rowIterator2.next(); // For each row, iterate through all the columns Iterator<Cell> cellIterator1 = row1.cellIterator(); while (cellIterator1.hasNext()) { Cell cell1 = cellIterator1.next(); // Check the cell type and format accordingly // This is for read only one column from excel if (cell1.getColumnIndex() == 0) { switch (cell1.getCellType()) { case Cell.CELL_TYPE_NUMERIC: arr2.add(cell1.getNumericCellValue()); System.out.print(cell1.getNumericCellValue()); break; case Cell.CELL_TYPE_STRING: arr2.add(cell1.getStringCellValue()); System.out.print(cell1.getStringCellValue()); break; case Cell.CELL_TYPE_BOOLEAN: arr2.add(cell1.getBooleanCellValue()); System.out.print(cell1.getBooleanCellValue()); break; } } // this continue is for // continue; } System.out.println(""); } System.out.println("book1.xls -- " + arr1.size()); System.out.println("book1.xls -- " + arr2.size()); // compare two arrays for (Object process : arr1) { if (!arr2.contains(process)) { arr3.add(process); } } System.out.println("arr3 list values - = - = + " + arr3); writeStudentsListToExcel(arr3); // closing the files file1.close(); file2.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // write into new file excel private static void writeStudentsListToExcel(ArrayList arr3) { FileOutputStream fos = null; try { fos = new FileOutputStream( "D:/Test/output/result.xls"); HSSFWorkbook workBook = new HSSFWorkbook(); HSSFSheet spreadSheet = workBook.createSheet("email"); HSSFRow row; HSSFCell cell; // System.out.println("array size is :: "+minusArray.size()); int cellnumber = 0; for (int i1 = 0; i1 < arr3.size(); i1++) { row = spreadSheet.createRow(i1); cell = row.createCell(cellnumber); // System.out.print(cell.getCellStyle()); cell.setCellValue(arr3.get(i1).toString().trim()); } workBook.write(fos); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // end -write into new file } 

Я не знаю, как это сделать с помощью Apache, но я знаю, что на вкладке обзора в Excel есть возможность отслеживать изменения, но сначала нужно включить их. Его надежная функция, которая говорит вам, кто, когда и что. Для проверки этих изменений вам потребуется использовать лист excel (который также можно установить в режиме общего доступа), но вам понадобится только один лист по сравнению со старой копией и новой копией.

  • Запрос на устранение ошибки не может преобразовать из void в HSSFCell
  • Java :: Как импортировать файл Excel, сохраненный на Google Диске, в специальную электронную таблицу Google
  • Добавление строки в большой файл xlsx (вне памяти)
  • Параметры чтения Excel с использованием Apache POI
  • XSLT проверяет, находится ли строка внутри набора
  • Как читать диаграмму с листа Excel с помощью java?
  • Запись строки JSON из Java в Excel форматированным способом
  • Запись данных из базы данных в CSV с использованием CSVWriter, дающая значения нежелательной почты в CSV-файле, открытые в Excel
  • задайте тип формата столбца как дату или время, используя HSSFSheet
  • многократное согласование с одним POI стиля
  • как получить дату timestamp значение из листа excel с помощью библиотеки Java Excel
  • Давайте будем гением компьютера.