Для проверки только содержимого первых листов в Kotlin (легко может быть преобразовано в 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)
и в вашем коде добавьте assert
assertTrue(checkEqualityExcelDocs(expected, actual), "Docs aren't equal!")
, как вы можете видеть doc.toList().first()
займет только первый лист документа, если вам нужно сравнить каждый лист или немного изменить код.
Также неплохо бы не учитывать "" пустые строковые ячейки, мне эта функциональность не нужна (также просто добавьте эту часть, если вам нужно).
также может быть полезна информация
//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()))
и второй документ из файла для сравнения с
val secondDoc = XSSFWorkbook(Test::class.java.getClassLoader().getResource("yourfile.xlsx").path)