0

我创建了一个代码。理想情况下,代码的作用是:-

  1. 它执行函数GetTaskStatus()。我的代码中还有其他几个类似的功能。
  2. 如果任何函数发生异常,它会将控件移动到 ExcelRecorder() 函数
  3. 如果因此在任何函数中捕获到异常,我必须在给定行的 J 单元格中的 Excel 工作表中写入 FAIL ,并且在同一行的 K 单元格中写入确切的异常错误(例如,找到 NullReferenceException)。简而言之,J 单元格是 RESULT,K 单元格是 REMARKS。我的 excel 表中有几行。
  4. 如果任何函数都没有发生异常,我只需要在给定行的 J 单元格中写入 PASS
  5. 我的代码能够做到这一点。但是,有一个问题。无论是否发生异常,我的代码都在为我的 excel 中的所有行输入 FAIL 和 REMARKS(尽管某些函数不会导致任何异常)

我已经发布了我的代码的主要片段。谁能让我知道我哪里出错了?如果函数没有发生异常,我需要输入 PASS。

代码如下

public void GetTaskStatus()
        {
            try
            {
                Console.WriteLine("Invoking GetTaskStatus method");
                Console.WriteLine("------------------****-----------------");
                m_taskStatus = taskClient.GetTaskStatus(m_taskID);
                Console.WriteLine("Task status : " + m_taskStatus.taskStatus.ToString());
                Console.WriteLine("-----------------------------------");
            }
            catch (Exception ex)
            {
                MessageBox.Show("An exception has occured. Please check the Excel sheet for more info", "Exception Caught" + ex);
                ExcelRecorder(true, ex.Message);
            }
            finally
            {
                GC.Collect();
            }
        }


public void ExcelRecorder(bool isExceptionalData, string message)
        {
            MessageBox.Show("ExcelRecorder method reached when exception occurs");
            //Code for recording into excel should be written here
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/dsds.xlsx");
            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;
            int rowCount = xlRange.Rows.Count;
            int colCount = xlRange.Columns.Count;
            int numSheets = xlWorkbook.Sheets.Count;
            for (int row = 2; row <= rowCount; row++)
            {
                if (isExceptionalData)
                {
                    ((Range)xlWorksheet.Cells[row, "J"]).Value2 = "FAIL";
                    ((Range)xlWorksheet.Cells[row, "K"]).Value2 = message;
                }
                else
                {
                    ((Range)xlWorksheet.Cells[row, "J"]).Value2 = "PASS";
                }
            }
            xlWorkbook.Save();
            xlWorkbook.Close(0,0,0);
            xlApp.Quit();
        }
4

1 回答 1

0

在我看来这isExceptionalData总是正确的,因此这个代码块

if (isExceptionalData)
{
    ((Range)xlWorksheet.Cells[row, "J"]).Value2 = "FAIL";
    ((Range)xlWorksheet.Cells[row, "K"]).Value2 = message;
}
else
                {
    ((Range)xlWorksheet.Cells[row, "J"]).Value2 = "PASS";
}

总是会沿着'FAIL'分支

在你的尝试中添加这个将在没有异常发生时相应地添加行。

 ExcelRecorder(false, null);
于 2012-06-22T09:43:58.470 回答