使用VB.NET处理Excel(HRESULT异常:0x8002000B(DISP_E_BADINDEX))

6

我正在尝试从VB.net创建Excel文件,这是我第一次尝试。 我已经添加了Microsoft.Office.Excel引用,并导入了Microsoft.Office.Interop。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim xlApp As Excel.Application
    Dim xlWorkBook As Excel.Workbook
    Dim xlWorkSheet As Excel.Worksheet
    Dim misValue As Object = System.Reflection.Missing.Value

    xlApp = New Excel.ApplicationClass
    xlWorkBook = xlApp.Workbooks.Add(misValue)
    xlWorkSheet = CType(xlWorkBook.Sheets("sheet1"), Excel.Worksheet)
    xlWorkSheet.Cells(1, 1) = "Something here"
    xlWorkSheet.SaveAs("D:\vbexcel.xlsx")

    xlWorkBook.Close()
    xlApp.Quit()
    releaseObject(xlApp)
    releaseObject(xlWorkBook)
    releaseObject(xlWorkSheet)

    MsgBox("Excel file created , you can find the file c:\")

End Sub

产生的错误在这一行:
   xlWorkSheet = CType(xlWorkBook.Sheets("sheet1"), Excel.Worksheet)

   Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))

有些工作表名称在使用文本名称时可以正常工作,但对于上面指示抛出异常的工作表名称,我们将不得不使用索引。 - Ruruboy
2个回答

12

也许你使用的 Excel 版本不支持英语。而且,“sheet” 在本地语言中可能是一个脏话,它在英语中也有点不雅;) 你的名字表明英语不是默认语言。为避免这种意外,请使用索引而不是名称:

    xlWorkSheet = CType(xlWorkBook.Sheets(1), Excel.Worksheet)

IT工作正常。 - Mouhcine Benmeziane

2

这也可能是因为

Workbook.Worksheets.Count

这取决于您的Excel设置,使用的工作表数量可能少于您所需。对我而言,它从3个工作表开始,但对同事而言,它从2个工作表开始。

因此,您可以调用

Workbook.Worksheets.Add()

达到所需的纸张数量


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接