【问题标题】:Excel worksheet get itemExcel工作表获取项目
【发布时间】:2023-03-27 08:25:01
【问题描述】:

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

【问题讨论】:

    标签: c# excel office-interop


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我创建了新工作表并分配了 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);
        

        【讨论】:

          猜你喜欢
          • 2019-01-14
          • 2021-10-09
          • 1970-01-01
          • 1970-01-01
          • 2021-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多