使用断言比较两个Excel文件

5
我正在使用Visual Studio创建一个自动化测试,它会创建两个Excel表格。作为最后的检查,我需要比较这两个Excel表格的内容,并确保它们相等。是否有一种方法可以使用断言来实现呢?
类似于 Assert.AreEqual(file1, file2); 这样的方式?
非常感谢您的帮助和指导!

3
您需要使用 Office Interop 打开两个电子表格,并通过行和列进行循环比较每个单元格的值。您可以在此处阅读更多关于 Office Interop 的信息:http://stackoverflow.com/questions/16213255/how-to-read-cell-values-from-existing-excel-file - Jon
3个回答

4

感谢 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.");

1
除了最后一个单元格外,如果任何单元格的值在两个工作簿中不同,则测试用例将通过。 - Mehwish

2
你能把预期/实际的 Excel 表格转换为文本格式,例如 CSV 吗?
如果可以的话,你可以使用 Approval Tests。这样可以让你将文本文件作为测试结果的“预期”输出。当测试失败时,它可以显示测试的实际结果,并将其与预期结果进行比较。

Diff view

来自 Approval Tests 的 此评论 的屏幕截图。

0

一种选择是使用名为EPPlus的开源库。您可以在自动化测试应用程序中下载并引用它。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文件,可以采用相同的过程,这将为您提供所需的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接