Excel工作表获取项目

时间:2014-02-18 07:57:16

标签: c# excel office-interop

我的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(对象索引)

3 个答案:

答案 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);