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

0

内部例外がないことを意味し、nullです。内部例外のメッセージが存在する場合に表示したい場合は、最初にそれを確認する必要があります

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

内部例外:例外 X が前の例外 Y の直接の結果としてスローされる場合、X の InnerException プロパティには Y への参照が含まれている必要があります。InnerException プロパティを使用して、現在の例外の原因となった一連の例外を取得します。

于 2013-08-07T17:45:34.363 に答える