我的Excel工作表有问题。我正在尝试使用c#创建一个Excel文件。
此代码在我的计算机上正常运行并运行,但在其他计算机上最后一行出错:
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheetInvoice;
Excel.Worksheet xlWorkSheetInvoiceLine;
object misValue = System.Reflection.Missing.Value;
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheetInvoice = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheetInvoiceLine = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);
System.Runtime.InteropServices.COMException(0x8002000B):索引无效。 (HRESULT异常:0x8002000B(DISP_E_BADINDEX)) 在Microsoft.Office.Interop.Excel.Sheets.get_Item(对象索引)
答案 0 :(得分:1)
我在使用Excel 2013的计算机上执行了具有类似代码的示例应用程序,并且它在您提到的同一行代码中失败。默认情况下,Excel 2013应用程序打开时会显示一个工作表(“Sheet1”),因此您必须相应地修改代码
答案 1 :(得分:0)
DISP_E_BADINDEX似乎表明其他计算机上的工作表数量较少。在使用get_Item()之前构建一个检查以查看工作表的数量是否小于2.
答案 2 :(得分:0)
我创建了新工作表并分配了xlWorkSheetInvoice和xlWorkSheetInvoiceLine来解决它。
var xlSheets = xlWorkBook.Sheets as Excel.Sheets;
var xlNewSheet = (Excel.Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing);
var xlNewSheet2= (Excel.Worksheet)xlSheets.Add(xlSheets[2], Type.Missing, Type.Missing, Type.Missing);
xlWorkSheetInvoice = xlNewSheet;
xlWorkSheetInvoiceLine = xlNewSheet2;
xlWorkSheetInvoice = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheetInvoiceLine = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);