我从未见过这种情况发生在我多年的编程中,并且不得不问是否有其他人知道这是为什么......
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.....
}
我从未见过这种情况。 那里有任何线索或建议吗?
感谢!!!
答案 0 :(得分: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());
}
答案 1 :(得分:0)
这意味着没有内部异常,它为空。如果你想显示内部异常的消息如果它存在你需要先检查
MessageBox.Show("An error occured: " + (ex.InnerException != null)
? ex.InnerException.ToString()
: ex.ToString());
内部异常:当异常X作为前一个异常Y的直接结果抛出时,X的InnerException属性应该包含对Y的引用。 使用InnerException属性获取导致当前异常的异常集。