2012-06-22 55 views
0

我已經創建了一個代碼。理想的代碼是: -使用excel文件進​​行異常處理

  1. 它執行函數GetTaskStatus()。我的代碼中還有其他幾個類似的功能。
  2. 如果任何函數發生異常,它將控件移動到ExcelRecorder()函數
  3. 如果在任何函數中都有這樣的異常,我必須在Excel表格中寫入FAIL,在給定行的J單元格以及同一行的K單元格中的確切異常錯誤(例如,,NullReferenceException被發現爲)。總之,J細胞是RESULT,K細胞是REMARKS。我的Excel表中有幾行。
  4. 如果發生任何功能也不例外,我只需要編寫PASS在給定行的殲細胞
  5. 我的代碼是能夠做到這一點。但是,但是,有一個問題。無論是否發生異常,我的代碼都爲我的Excel中的所有行輸入FAIL和REMARKS(雖然某些功能不會導致任何異常)

我已發佈我的代碼的主要代碼片段。任何人都可以讓我知道我要去哪裏嗎?如果函數沒有發生異常,我需要輸入PASS。

CODE低於

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(); 
     } 
+0

使用調試器來查看爲什麼捕獲到異常。 Ctrl-Alt-E彈出「例外」對話框。選中所有框以「拋出中斷」。 – sehe

回答

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); 
+0

是啊..它總是如此......但我如何改變它,以便它在發生異常時變爲真,在異常不發生時爲假?我試圖將它添加到finally塊中,但它沒有任何用處。 – user1473998

+0

hi..i can not add ExcelRecorder(false,ex.Message);在我的嘗試... COS EX只在catch語句中聲明..如果我添加ExcelRecorder(false,ex.Message);在嘗試聲明中,我得到一個錯誤「在當前上下文中不存在術語ex」...我已經嘗試過這個...你能建議別的東西嗎? – user1473998

+0

使用null或string.empty – ChrisBint