2012-06-21 204 views
0

我有一個函數如下在Excel工作表中記錄他們:捕獲異常和

public int CreateMyTask() 
{ 
    Console.WriteLine("Invoking CreateTask method"); 
    Console.WriteLine("-----------------------------------"); 
    m_taskID = taskClient.CreateTask(m_tInstance); 
    Console.WriteLine("Task create successfully:ID=" + m_taskID.ToString()); 
    Console.WriteLine("-----------------------------------"); 
    return m_taskID; 
} 

我需要做的是: -

  1. 我必須檢查功能的異常是否有發生。基本上可以發生任何異常。我們並不擔心發生了什麼異常。我們簡單地需要找出是否發生了異常HAS。讓這個例外成爲任何事情。

  2. 如果確實發生了異常,我必須在我的Excel工作表(D:\ excel.xls)的第10行的第2行中記錄一個單詞「FAIL」,並添加與「Nullreference exception已發生「或」除以零發生異常「或已發生的任何異常。例外的確切文本必須複製到第2行,單元格11

  3. 如果沒有發生異常,那麼我必須在我的Excel工作表的第2行第10行中記錄一個單詞「PASS」。

有人可以幫我開始嗎?我對c#很陌生。可以這樣做一些投入。

+1

首先谷歌和嘗試一些,然後出現問題。 –

+1

是的,請谷歌「c#excel interop」這將讓你開始。還可以使用「catch(Exception ex)」來捕獲所有異常。 – Polyfun

+0

當問題立即想到是否可以運行多次,如果是的話,當有多個異常時會發生什麼?它顯然取決於你的上下文,但你有沒有考慮將異常存儲在數據庫中,並從excel中檢索它們(這是一個非常簡單的過程,不需要真正的編碼)。 – Chris

回答

0
public int CreateMyTask() 
{ 
     try 
     { 
      Console.WriteLine("Invoking CreateTask method"); 
      Console.WriteLine("-----------------------------------"); 
      m_taskID = taskClient.CreateTask(m_tInstance); 
      Console.WriteLine("Task create successfully:ID=" + m_taskID.ToString()); 
      Console.WriteLine("-----------------------------------"); 
      WriteResultInExcel(false, ""); 
      return m_taskID; 
     } 
     catch(Exception ex) 
     { 
      WriteResultInExcel(true, ex.Message); 
     } 
} 


private void WriteResultInExcel(bool isExceptionalData, string message) 
{ 
     Excel.ApplicationClass excelApp = new ApplicationClass(); 
     Workbook workbook = excelApp.Workbooks.Open("D:\\excel.xls", 0, false, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
     Worksheet worksheet = (Worksheet)workbook.Sheets.get_Item(1); 
     if(isExceptionalData) 
     { 
      ((Range)worksheet.Cells["2", "J"]).Value2 = "FAIL"; 
      ((Range)worksheet.Cells["2", "K"]).Value2 = message; 
     } 
     else 
     { 
      ((Range)worksheet.Cells["2", "J"]).Value2 = "PASS"; 
     } 
     workbook.Save(); 
     workbook.Close(0, 0, 0); 
     excelApp.Quit(); 
} 

確保檢查文件是否存在「d:\ excel.xls」,並添加引用「的Microsoft.Office.Interop.Excel」。

千萬不要錯過它添加到您的指令部分:使用的Microsoft.Office.Interop.Excel

; using Excel = Microsoft.Office.Interop.Excel;

+0

嗨我做你說...它工作正常..但有一個小問題..在Excel文件中,我只看到一個文本「異常」我想描述的全文在那裏...... 「Nullreferenceexception被發現」我錯過了什麼? – user1463269

+0

您可以在'WriteResultInExcel'函數代碼中添加一個調試點,並讓我知道您對字符串'message'中的值是什麼? –

1

你的問題是兩倍。首先,圍繞此方法的功能包裝一個try catch塊。無論是在方法內還是在CreateMyTask方法的任何調用周圍完成,都取決於更廣泛的結構和代碼的使用。爲了熟悉try catch的使用,請參考:http://www.dotnetperls.com/catch - 在此鏈接中,將用將寫入Excel工作表的方法替換writeline。在計劃寫入電子表格的方式中,我需要更多的上下文,但是,正如所建議的那樣,谷歌的方式可以從Excel文件中讀取和寫入。

+0

如果你能幫助我完成上述功能的代碼,那對我來說很有用。只要發現任何異常,如果它是通過的話,就在指定位置寫入d字PASS到excel表單。如果失敗,則將d字FAIL寫入Excel表並寫入例外描述。 – user1463269

+2

如果我可以讓別人編寫我的代碼,那對我來說也是有用的,不幸的是這不是一個選項。 – stuartd

+0

@ user1463269 - 它不能像那樣工作。我不是勺子餵你的代碼。所有你需要做的是我推薦你做的兩件事,你已經得到了你的解決方案。更何況你將會知道它對於任何未來的項目。 –