Excel工作表获取项目

我有一个Excel工作表的问题。 我正在尝试用c#创build一个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):索引无效。 (从HRESULTexception:0x8002000B(DISP_E_BADINDEX))在Microsoft.Office.Interop.Excel.Sheets.get_Item(对象索引)

这篇文章可能会帮助您创build一个新的Excel与多个工作表的情况: 尝试添加多个工作表到Excel

我使用Excel 2013在一台机器上执行了一个类似代码的示例应用程序,并且在您提到的同一行代码上执行失败。 默认情况下,Excel 2013应用程序打开时只有一个工作表(“Sheet1”),因此您必须相应地修改代码

DISP_E_BADINDEX似乎表明其他计算机上的工作表数量较less。 在使用get_Item()之前,检查工作表的数量是否小于2。

我已经创build了新的工作表,并分配了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);