使用断言来比较两个excel文件

我使用Visual Studio来创build一个自动testing,创build两个Excel表。 作为最后的检查,我需要比较这两个excel表格的内容,并确保它们是平等的。 有没有办法做到这一点与断言?

Assert.AreEqual(file1, file2);

任何帮助或指导,将不胜感激!

你可以将预期/实际的Excel工作表转换为文本格式,如CSV?

如果是这样,您可以使用审批testing 。 这可以让你有一个文本文件作为“预期”的testing结果。 当testing失败时,它可以显示testing的实际结果,与预期的结果不同。

差异视图

从批准testing审查截图。

一个选项将使用称为EPPlus开源库。 您可以在自动testing应用程序中下载并引用它。 EPPlus为您提供了多种方法来读取excel文件并进行比较。 其中一个选项是C#Datatable。 这是一个示例代码

 public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true) { using (var pck = new OfficeOpenXml.ExcelPackage()) { using (var stream = File.OpenRead(path)) { pck.Load(stream); } var ws = pck.Workbook.Worksheets.First(); DataTable tbl = new DataTable(); foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column]) { tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column)); } var startRow = hasHeader ? 2 : 1; for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++) { var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column]; DataRow row = tbl.Rows.Add(); foreach (var cell in wsRow) { row[cell.Start.Column - 1] = cell.Text; } } return tbl; } } 

对于这两个Excel文件,可以采用相同的过程,它会给你想要的结果。

感谢Mangist的指导。 我写了下面的比较两个Excel文件:

 public bool compareFiles(string filePath1, string filePath2) { bool result = false; Excel.Application excel = new Excel.Application(); //Open files to compare Excel.Workbook workbook1 = excel.Workbooks.Open(filePath1); Excel.Workbook workbook2 = excel.Workbooks.Open(filePath2); //Open sheets to grab values from Excel.Worksheet worksheet1 = (Excel.Worksheet)workbook1.Sheets[1]; Excel.Worksheet worksheet2 = (Excel.Worksheet)workbook2.Sheets[1]; //Get the used range of cells Excel.Range range = worksheet2.UsedRange; int maxColumns = range.Columns.Count; int maxRows = range.Rows.Count; //Check that each cell matches for (int i = 1; i <= maxColumns; i++) { for (int j = 1; j <= maxRows; j++) { if (worksheet1.Cells[j, i].Value == worksheet2.Cells[j, i].Value) { result = true; } else result = false; } } //Close the workbooks GC.Collect(); GC.WaitForPendingFinalizers(); Marshal.ReleaseComObject(range); Marshal.ReleaseComObject(worksheet1); Marshal.ReleaseComObject(worksheet2); workbook1.Close(); workbook2.Close(); excel.Quit(); Marshal.ReleaseComObject(excel); //Tell us if it is true or false return result; } 

并使用断言来检查结果:

 Assert.IsTrue(compareFiles(testFile, compareFile), "Output files do not match.");