Quantcast
Channel: Active questions tagged excel - Stack Overflow
Viewing all articles
Browse latest Browse all 88854

How to compare data in 2 excel with java

$
0
0

I have 2 excel with the same number of columns and the same number of rows. But the row position is not the same. I just want to check if row1 from excel1 is not matching on row1 of excel2 then go to row2 of excel2 and compare the data. If row2 from excel2 is again not matching then go to row3 of excel2. If match found then exit

public static void CompareTwoExcelFiles(String nasPath, String dbVal) {
    try {

        FileInputStream excellFile1 = new FileInputStream(nasPath);
        FileInputStream excellFile2 = new FileInputStream(dbVal);

        XSSFWorkbook workbook1 = new XSSFWorkbook(excellFile1);
        XSSFWorkbook workbook2 = new XSSFWorkbook(excellFile2);

        XSSFSheet sheet1 = workbook1.getSheetAt(0);
        XSSFSheet sheet2 = workbook2.getSheetAt(0);

        if (compareTwoSheets(sheet1, sheet2)) {
            System.out.println("\n\nThe two excel sheets are Equal");
        } else {
            System.err.println("\n\nThe two excel sheets are Not Equal");
        }

        excellFile1.close();
        excellFile2.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

private static boolean compareTwoSheets(XSSFSheet sheet1, XSSFSheet sheet2) {
    // TODO Auto-generated method stub
    int firstRow1 = sheet1.getFirstRowNum();
    int lastRow1 = sheet1.getLastRowNum();
    boolean equalSheets = true;
    for (int i = firstRow1; i <= lastRow1; i++) {

        System.out.println("\n\nComparing Row " + i);

        XSSFRow row1 = sheet1.getRow(i);
        XSSFRow row2 = sheet2.getRow(i);
        if (!compareTwoRows(row1, row2)) {
            equalSheets = false;
            System.err.println("Row " + i + " - Not Equal");
            break;
        } else {
            System.out.println("Row " + i + " - Equal");
        }
    }
    return equalSheets;
}

private static boolean compareTwoRows(XSSFRow row1, XSSFRow row2) {
    // TODO Auto-generated method stub
    if ((row1 == null) && (row2 == null)) {
        return true;
    } else if ((row1 == null) || (row2 == null)) {
        return false;
    }

    int firstCell1 = row1.getFirstCellNum();
    int lastCell1 = row1.getLastCellNum();
    boolean equalRows = true;

    // Compare all cells in a row
    for (int i = firstCell1; i <= lastCell1; i++) {
        XSSFCell cell1 = row1.getCell(i);
        XSSFCell cell2 = row2.getCell(i);
        System.out.println(cell1);
        System.out.println(cell2);
        if (!compareTwoCells(cell1, cell2)) {
            equalRows = false;
            System.err.println("       Cell " + i + " - NOt Equal");
            break;
        } else {
            System.out.println("       Cell " + i + " - Equal");
        }
    }
    return equalRows;
}

private static boolean compareTwoCells(XSSFCell cell1, XSSFCell cell2) {
    if ((cell1 == null) && (cell2 == null)) {
        return true;
    } else if ((cell1 == null) || (cell2 == null)) {
        return false;
    }

    boolean equalCells = false;
    int type1 = cell1.getCellType();
    int type2 = cell2.getCellType();
    if (type1 == type2) {
        if (cell1.getCellStyle().equals(cell2.getCellStyle())) {
            // Compare cells based on its type
            switch (cell1.getCellType()) {
            case HSSFCell.CELL_TYPE_FORMULA:
                if (cell1.getCellFormula().equals(cell2.getCellFormula())) {
                    equalCells = true;
                }
                break;
            case HSSFCell.CELL_TYPE_NUMERIC:
                if (cell1.getNumericCellValue() == cell2.getNumericCellValue()) {
                    equalCells = true;
                }
                break;
            case HSSFCell.CELL_TYPE_STRING:
                if (cell1.getStringCellValue().equals(cell2.getStringCellValue())) {
                    equalCells = true;
                }
                break;
            case HSSFCell.CELL_TYPE_BLANK:
                if (cell2.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
                    equalCells = true;
                }
                break;
            case HSSFCell.CELL_TYPE_BOOLEAN:
                if (cell1.getBooleanCellValue() == cell2.getBooleanCellValue()) {
                    equalCells = true;
                }

The above code is checking row1(excel1)=row1(excel2) combination only and if the data is not available at row1 of excel2 test fails even though the matching data is at row2 of excel2.

Please help..


Viewing all articles
Browse latest Browse all 88854

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>