我有以下代码来打开工作簿并只保留一个工作表:
//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会引发异常。 知道是什么导致了这个吗?
是的,我在同一个异常中看到了其他帖子,但我的代码与他们的场景不符。
谢谢你的帮助, 奥马尔
答案 0 :(得分:3)
向后循环,因此您不要尝试删除不再存在的索引。
E.g for (int i = len; i > 1; i--) ...