1

在我多年的编程中,我从未见过这种情况发生,我不得不问是否有人知道这是为什么......

            Excel.Worksheet worksheet;
        Excel.Sheets sheets;
        Excel.Workbook theWorkbook;
        Excel.Application ExcelObj = null;

        try
        {
            ExcelObj = new Excel.Application();
            worksheet = new Excel.Worksheet();
            string sheetName;

            theWorkbook = ExcelObj.Workbooks.Open(txtImportFilePath.Text, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, true, 0, true, 1, 0);
            sheets = theWorkbook.Worksheets;


        }
        catch (Exception ex)
        {
            MessageBox.Show("An error occured: " + ex.InnerException.ToString);
        }
        finally
        {
            worksheet = null;
            sheets = null;
            theWorkbook = null;
            ExcelObj.Quit();
            ExcelObj = null;
        }

catch 块本身导致程序因错误而崩溃。实际错误发生在以下行: theWorkbook = ExcelObj.Workbooks.Open(..... 它试图打开的文件已损坏或扩展名不匹配错误。

但是当消息框试图显示时,有一个对象引用未设置为实例错误。

这不是因为消息框。这是因为 ex.InnerException。我尝试做一些不同的事情,它在 ex.InnerException 行上抛出了错误:

Catch(Exception ex)
{
string err;
err = ex.InnerException; //Object reference not set to an instance.....
}

我从未见过这种情况发生。有什么线索或建议吗?

谢谢!!!

4

2 回答 2

7

问题是Exception您收到的没有内部异常。

你应该检查这个:

catch (Exception ex)
{
    if (ex.InnerException != null)
        MessageBox.Show("An error occured: " + ex.InnerException.ToString());
    else
        MessageBox.Show("An error occured: " + ex.ToString());
}
于 2013-08-07T17:45:22.863 回答
0

这意味着没有内部异常,它是 null。如果要显示内部异常的消息(如果存在) ,则需要先检查

  MessageBox.Show("An error occured: " + (ex.InnerException != null) 
                  ? ex.InnerException.ToString()
                  : ex.ToString());

Inner Exception:当异常 X 作为先前异常 Y 的直接结果而引发时,X 的 InnerException 属性应包含对 Y 的引用。使用 InnerException 属性获取导致当前异常的异常集。

于 2013-08-07T17:45:34.363 回答