Java 中比较两个 Excel 文件10 Sept 2024 | 5 分钟阅读 比较两个或多个 Excel 工作簿是一个非常常见的需求,尤其是在自动化测试场景中。在本节中,我们将学习如何比较两个 Excel 工作簿,或者验证两个工作簿是否包含相同的数据集。 比较 Excel 文件我们不应该直接开始按单元格或单元格数据来比较 Excel 工作表。在进行单元格比较之前,我们应该先检查基本条件是否满足。 首先应检查的排序好的基本条件如下:
当上述条件都检查通过后,我们才应该进行单元格数据比较。如果任何一个检查失败,我们就不应该继续进行。 检查两个 Excel 工作簿是否具有相同数量的工作表要获取工作簿中的工作表数量,我们需要使用 Apache POI 提供的 Workbook 接口的 getNumberOfSheets() 方法。Workbook 接口由 XSSFWorkbook、HSSFWorkbook 等主要类实现。 检查两个 Excel 工作簿的工作表名称是否相同这里有两种情况。 第一种:仅验证工作表名称是否相同,而不考虑工作表顺序。 第二种:验证工作表名称是否相同,并且顺序也相同。 检查两个工作簿在所有工作表中是否具有相同数量的行我们需要检查工作簿中每个工作表的行数是否相同。如果工作簿 1 的 sheet1 有 10 行,sheet2 有 15 行,那么工作簿 2 的 sheet1 也应该有 10 行,sheet2 也应该有 15 行。 要获取工作表中的行数,我们需要使用 Sheet 接口的 getPhysicalNumberOfRows() 方法。此方法返回物理定义的行数(而不是工作表中的行数)。如果我们有一个工作表中有 10 行,每一行都将从零开始索引或编号。对所有工作表都需要执行相同的操作。下面是一个工作表的示例代码。 检查两个工作簿的行是否具有相同的列数一行可以有不同数量的列。因此,我们需要检查所有工作表中每一行的列数。要遍历行,我们可以使用 Sheet 接口的 rowIterator() 方法,它返回物理行的迭代器。在遍历行的过程中,我们需要获取物理单元格的数量。对所有工作表都需要执行相同的逻辑。 现在我们需要检查单元格数据并断言。 每个单元格都有类型,如 String、Numeric、Boolean 等。要获取按类型划分的值,需要使用不同的方法。例如,要从 Numeric 类型的单元格中获取数据,我们需要使用 getNumericCellValue(),对于 String 类型的单元格,则使用 getStringCellValue()。 如果单元格包含日期,我们没有这样的 Cell 类型。带有日期的单元格属于 Numeric 类型。我们需要检查单元格是否为日期格式。我们可以使用 DateUtil.isCellDateFormatted(Cell cell) 进行检查。 CompareExcelFiles.java 输出 The cell values at (0, 0) are the same The cell values at (0, 1) are the same The cell values at (0, 2) are the same The cell values at (0, 3) are the same The cell values at (1, 0) are the same The cell values at (1, 1) are the same The cell values at (1, 2) are the same The cell values at (1, 3) are the same The cell values at (2, 0) are the same The cell values at (2, 1) are the same The cell values at (2, 2) are the same The cell values at (2, 3) are the same The cell values at (3, 0) are the same The cell values at (3, 1) are the same The cell values at (3, 2) are the same The cell values at (3, 3) are the same 注意:在上面的程序中,假设 file1.xls 和 file2.xls 包含两个结构和值相同的工作表。下一主题Java 中的连续素数和程序 |
在数学和计算机科学中,顺序很重要,排列是一个引人入胜的主题。字符串中的排列定义为重新排列给定字符串中的字符以创建新的排列。在本节中,我们将讨论字符串排列...
5 分钟阅读
在 Java 编程世界中,开发人员经常会遇到“容器”和“组件”这两个术语。这两个术语是 Java 图形用户界面(GUI)开发的基础,理解它们的区别对于创建健壮且模块化的应用程序至关重要。在本节中,我们将探讨关键区别…
阅读 4 分钟
Java 8 中的 Collectors.groupingBy() 方法现在允许开发人员直接执行 GROUP BY 操作。GROUP BY 是一种非常有用的 SQL 聚合操作。它允许您根据指定条件对记录进行分类。在 Java 中,如何分组?例如,如果...
阅读 6 分钟
在 Java 中,根据指定条件(通常由谓词封装)选择性地从 List 中移除元素,是编程中的常见任务。当开发人员必须过滤掉不符合特定标准的元素时,此操作至关重要,可提高效率和相关性。
阅读9分钟
java.net Java 程序是专门为在网络上运行而构建的。为了练习这些网络应用程序,在该包下提供了一组类。下面给出了各种类的摘要:类说明 Authenticator 对于网络应用程序,首先获取...很重要。
阅读 6 分钟
java.time.chrono.JapaneseChronology 类有一个 eras() 方法。要获取此特定日本历法下的所有 era,请使用 JapaneseChronology 代码。语法:public List eras() 参数:此方法不能接受任何参数。返回值:此历法下的所有 era...
阅读 3 分钟
Java 中元类与类的区别 元类 在面向对象编程语言中,元类可以定义为一种类,它主要描述其他类的功能和行为。Java 的 java.lang.Class 类代表了元类的概念。Java 中的每个类都是……的实例
阅读 4 分钟
这是 Google、Amazon、TCS、Accenture 等顶级 IT 公司面试中经常出现的问题。通过解决该问题,人们希望检查面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将……
阅读 8 分钟
如今,系统都配备了多核处理器。多核处理器可以加快计算速度。因此,程序员有必要有效地利用多核处理器,以便在更短的时间内生成结果。Java 中的 Fork/Join 用于实现...
5 分钟阅读
在本节中,我们将学习什么是哥德巴赫数,并创建 Java 程序来检查给定数字是否是哥德巴赫数。哥德巴赫数 Java 程序经常在 Java 编码测试中询问,以检查程序员的逻辑。1742 年,德国...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India