【问题标题】:Bool returns true whereas one of the excel cell value does not matches to other cell value using C#Bool 返回 true,而 Excel 单元格值之一与使用 C# 的其他单元格值不匹配
【发布时间】:2021-01-23 05:42:50
【问题描述】:

我将 workbook1 的第一个工作表与 wrokook2 的第一个工作表进行比较,然后在比较第一个工作表的数据后转到第二个工作表。将 workbook1 的第二个工作表与 workbook2 的第二个工作表进行比较。这是图像

我使用的代码是

public bool CompareFiles(string filePath1, string filePath2)
        {

            bool result = false;
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            excel.Visible = true;
            excel.DisplayAlerts = false;
            
            //Open files to compare
            Microsoft.Office.Interop.Excel.Workbook workbook1 = excel.Workbooks.Open(filePath1);
            Microsoft.Office.Interop.Excel.Workbook workbook2 = excel.Workbooks.Open(filePath2);
          
            int numSheets = workbook2.Sheets.Count;

            for (int a = 1; a <= numSheets; a++)
            {
                //Open sheets to grab values from
                Microsoft.Office.Interop.Excel.Worksheet worksheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook1.Sheets[a]; 
                Microsoft.Office.Interop.Excel.Worksheet worksheet2 = (Microsoft.Office.Interop.Excel.Worksheet)workbook2.Sheets[a]; 

                //Get the used range of cells
                Microsoft.Office.Interop.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++)
                    {
                        var value = range.Cells[maxRows, maxColumns].Value2;
                        if (worksheet1.Cells[j, i].value== worksheet2.Cells[j, i].value)
                        {

                            result = true;
                        }
                        else
                        
                            result = false;
                    }
                    
                }

                
            }

            workbook1.Close();
            workbook2.Close();
            excel.Quit();

            return result;
        }
        Assert.IsTrue(CompareFiles(filepath1 , filepath2);

现在考虑屏幕截图 两个工作簿中单元格 B5 的值不匹配。布尔值应该返回 false。当它返回 true 并且资产显示 is true 通过测试用例时。而它应该失败。只有当最后一个单元格值不同时,它才会使测试用例失败。否则它将通过测试用例。

我该如何解决这个问题?我正在使用 C#。

【问题讨论】:

    标签: c# selenium mstest


    【解决方案1】:

    您可能正在比较对象引用(我假设 worksheet2.Cells[j, i].value 是一个对象)。请尝试将其转换为字符串

    if ((string)worksheet1.Cells[j, i].value== (string)worksheet2.Cells[j, i].value)
    

    【讨论】:

    • 它显示'无法将类型'double'转换为'string''
    • 那是因为在第 3 列中有数字。
    • 仍然在通过测试用例,因为单元格中的值不同。
    【解决方案2】:

    您是否应该将您的 var 转换为字符串并使用 string.Compare?我建议调试该特定行的读取方式。

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      相关资源
      最近更新 更多