2012-06-21 65 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 - 它不能像那样工作。我不是勺子喂你的代码。所有你需要做的是我推荐你做的两件事,你已经得到了你的解决方案。更何况你将会知道它对于任何未来的项目。 –