0

ワークブックを開いてシートを 1 つだけ保持する次のコードがあります。

//Get a new workbook.
oWB = app.Workbooks.Add(Missing.Value);

int len = oWB.Sheets.Count;

for (int i = 1; i < len; i++)
{
    ((Worksheet)oWB.Sheets[i]).Delete();
}

oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oWB.ActiveSheet;

このコードは、多くのクライアント構成で長年にわたって機能してきました。

何らかの理由で、Excel 2013 (ヘブライ語) を使用している顧客がいて、彼のマシンで次の例外が発生します。

System.Runtime.InteropServices.COMException (0x8002000B): Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))
   at Microsoft.Office.Interop.Excel.Sheets.get__Default(Object Index)
   at IOSIGHT.Win.ActiveReports.ExcelHelper.StartExcel()

状況がわかれば、何らかの理由でワークブックにシートが残っていなかったようで、呼び出してoWb.ActiveSheet例外をスローします。何がこれを引き起こしたのですか?

はい、同じ例外に関する他の投稿を見ましたが、私のコードはシナリオと一致しません。

4

1 に答える 1

3

逆方向にループして、存在しなくなったインデックスを削除しようとしないようにします。

例えばfor (int i = len; i > 1; i--) ...

于 2013-07-11T12:45:09.607 に答える