2012-06-22 8 views
0

코드를 만들었습니다. 이상적인 코드는 다음과 같습니다. -엑셀 파일을 사용한 예외 처리

  1. GetTaskStatus() 함수를 실행합니다. 내 코드에는 몇 가지 다른 유사한 기능이 있습니다.
  2. 어떤 함수에서 예외가 발생하면 컨트롤을 ExcelRecorder() 함수로 이동합니다.
  3. 예외가이 함수에서 발견되면 Excel에서 지정된 행의 J로 FAIL을 작성해야합니다 동일한 행의 K 셀에서 정확한 예외 오류 (예 : , NullReferenceException이 발견됨)가 발생했습니다. 즉, J 셀은 RESULT이고 K 셀은 REMARKS입니다. 필자의 Excel 시트에는 여러 행이 있습니다.
  4. 어떤 함수에서도 예외가 발생하지 않은 경우 해당 행의 J 셀에 PASS를 써야합니다.
  5. 내 코드가이를 수행 할 수 있습니다. 그러나 그러나 문제가 있습니다. 에 관계없이 예외가 발생 여부에

를 (기능 중 일부는 예외가 발생하지 않습니다하지만) 내 코드 내 엑셀의 모든 행에 실패하고 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(); 
     } 
+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

예 .. 항상 그렇습니다 ...하지만 예외가 발생하면 true가되도록 예외를 변경하고 예외가 발생하지 않으면 false로 변경합니까? finally 블록에 추가하려고했으나 사용하지 않았습니다. – user1473998

+0

안녕하세요 .. 나는 ExcelRecorder (false, ex.Message)를 추가 할 수 없습니다. 내 try ... cos ex는 catch 문에서만 선언된다. if ExcelRecorder (false, ex.Message)를 추가한다; try 문에서, 나는 "현재의 컨텍스트에서 ex라는 단어가 존재하지 않는다"라는 오류가 발생합니다 ... 이미 시도했는데 ... 다른 뭔가를 제안 할 수 있습니까 pls ??? – user1473998

+0

null 또는 string.empty 사용 – ChrisBint