Easiest way to compare two Excel files in Java?

前端 未结 11 872
面向向阳花
面向向阳花 2021-02-02 14:23

I\'m writing a JUnit test for some code that produces an Excel file (which is binary). I have another Excel file that contains my expected output. What\'s the easiest way to com

11条回答
  •  粉色の甜心
    2021-02-02 14:40

    To test only content of the first sheets in Kotlin (easily can be converted to java).

    private fun checkEqualityExcelDocs(doc : XSSFWorkbook, doc1 : XSSFWorkbook) : Boolean{
            val mapOfCellDoc = doc.toList().first().toList().flatMap { row -> row.map { Pair(PivotExcelCreator.IndexInThePivotTable(it.rowIndex,it.columnIndex),it.stringCellValue) }}.toMap()
            val mapOfCellDoc1 = doc1.toList().first().toList().flatMap { row -> row.map { Pair(PivotExcelCreator.IndexInThePivotTable(it.rowIndex,it.columnIndex),it.stringCellValue) }}.toMap()
            if(mapOfCellDoc.size == mapOfCellDoc1.size){
                return mapOfCellDoc.entries.all { mapOfCellDoc1.containsKey(it.key) && mapOfCellDoc[it.key] == mapOfCellDoc1[it.key]}
            }
            return false
        }
    
    data class IndexInThePivotTable(val row: Int, val col: Int)
    

    and in your code add assert

        assertTrue(checkEqualityExcelDocs(expected, actual), "Docs aren't equal!")
    

    as you can see doc.toList().first() will take only the first sheet of document, if you need to compare each sheet respectively change code a little.

    Also it is quite good idea to not take into account "" empty strings cells, I didn't need this functionality (As well, simply add this part, if you need).


    also it can be useful information

    //first doc I've got from outputstream such way
    val out = ByteArrayOutputStream()
    //some method which writes excel to outputstream
    val firstDoc = XSSFWorkbook(ByteArrayInputStream(out.toByteArray()))
    

    and second doc from file to compare with

    val secondDoc = XSSFWorkbook(Test::class.java.getClassLoader().getResource("yourfile.xlsx").path)
    

提交回复
热议问题