Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自HRESULT的异常:0x800A03EC excel.range_Excel_Vb.net_Excel Interop - Fatal编程技术网

来自HRESULT的异常:0x800A03EC excel.range

来自HRESULT的异常:0x800A03EC excel.range,excel,vb.net,excel-interop,Excel,Vb.net,Excel Interop,我从excel.range中的HRESULT:0x800A03EC中获取此错误异常 下面是我的代码 Private Sub excelInsertData(rowIndex As Integer, ColIndex As Integer, EDT As DataTable) Try Dim arr As Object(,) = New Object(EDT.Rows.Count - 1, EDT.Columns.Count - 1) {} Fo

我从excel.range中的HRESULT:0x800A03EC中获取此错误
异常
下面是我的代码

    Private Sub excelInsertData(rowIndex As Integer, ColIndex As Integer, EDT As DataTable)
    Try

        Dim arr As Object(,) = New Object(EDT.Rows.Count - 1, EDT.Columns.Count - 1) {}

        For r As Integer = 0 To EDT.Rows.Count - 1
            Dim dr As DataRow = EDT.Rows(r)

            For c As Integer = 0 To EDT.Columns.Count - 1
                arr(r, c) = dr(c)
            Next
        Next

        Dim c1 As Excel.Range = CType(xlWorkSheet.Cells(rowIndex, ColIndex), Excel.Range)
        Dim c2 As Excel.Range = CType(xlWorkSheet.Cells(rowIndex + EDT.Rows.Count - 1, EDT.Columns.Count + ColIndex - 1), Excel.Range)
        Dim range As Excel.Range = xlWorkSheet.Range(c1, c2)
        range.Value = arr '---------ERROR THROWN HERE

    Catch ex As Exception
        MsgBox(ex.toString)
    Finally
        EDT.Rows.Clear() : EDT.Columns.Clear()
    End Try
End Sub
我试图做的是将数据从Datatable(本例中为EDT)传输到Excel模板

以下是值范围、arr和EDT


范围。值-长度为5


长度与射程相同


我的数据表中的值(EDT)

此外,如果需要,我可以附加我的3b.xlsm文件的模板。


请询问我是否缺少任何需要提供的信息。

第一行只是从函数中获取数据表。您也可以只向子对象添加一个参数并传入一个参数。此代码创建一个新的Excel文件。第一个循环添加列名,第二个循环添加数据

Private Sub FillExcelFromDataTable()
    Dim dt = GetWorksheetData()
    Dim oExcel As New Excel.Application
    Dim oBook = oExcel.Workbooks.Add
    Dim oSheet = DirectCast(oBook.Worksheets.Add, Excel.Worksheet)
    Dim ColumnIndex = 1 'in Excel worksheet
    For Each col As DataColumn In dt.Columns 'This loop adds the header row
        oSheet.Cells(1, ColumnIndex) = col.ColumnName
        ColumnIndex += 1
    Next
    ColumnIndex = 1 'The columns and rows in the spreadsheet
    Dim RowIndex = 2 'The columns and rows in the spreadsheet
    For rowI = 0 To dt.Rows.Count - 1
        For Each col As DataColumn In dt.Columns
            oSheet.Cells(RowIndex, ColumnIndex) = dt(rowI)(col)
            ColumnIndex += 1
        Next
        ColumnIndex = 1 'Reset back to the first column
        RowIndex += 1
    Next
    oBook.Save()
    oBook.SaveAs(Filename:="ExcelDat.xlsx") 'Saved to "C:\Users\xxx\Documents\ExcelDat.xlsx"
    oBook.Close()
    oExcel.Quit()
End Sub

第一行只是从函数中获取数据表。您也可以只向子对象添加一个参数并传入一个参数。此代码创建一个新的Excel文件。第一个循环添加列名,第二个循环添加数据

Private Sub FillExcelFromDataTable()
    Dim dt = GetWorksheetData()
    Dim oExcel As New Excel.Application
    Dim oBook = oExcel.Workbooks.Add
    Dim oSheet = DirectCast(oBook.Worksheets.Add, Excel.Worksheet)
    Dim ColumnIndex = 1 'in Excel worksheet
    For Each col As DataColumn In dt.Columns 'This loop adds the header row
        oSheet.Cells(1, ColumnIndex) = col.ColumnName
        ColumnIndex += 1
    Next
    ColumnIndex = 1 'The columns and rows in the spreadsheet
    Dim RowIndex = 2 'The columns and rows in the spreadsheet
    For rowI = 0 To dt.Rows.Count - 1
        For Each col As DataColumn In dt.Columns
            oSheet.Cells(RowIndex, ColumnIndex) = dt(rowI)(col)
            ColumnIndex += 1
        Next
        ColumnIndex = 1 'Reset back to the first column
        RowIndex += 1
    Next
    oBook.Save()
    oBook.SaveAs(Filename:="ExcelDat.xlsx") 'Saved to "C:\Users\xxx\Documents\ExcelDat.xlsx"
    oBook.Close()
    oExcel.Quit()
End Sub

请检查此项:
新对象(EDT.Rows.Count-1,EDT.Columns.Count-1)
对于r As Integer=0到EDT.Rows.Count-1,检查什么?这只是数组大小声明@Dang D.KhanhI认为它可能是:
Dim arr(EDT.Rows.Count-1,EDT.Columns.Count-1)作为对象
。如果我真的这么说,我是从堆栈中复制的,以搜索“如何使用范围将数据插入excel”,所以我可以按照您的建议尝试,但我认为这不是问题@该死的卡恩,一定还有别的事。在我使用您发布的代码进行的测试中,没有出现您描述的错误,代码在几秒钟内成功地运行了一个包含10列和100行的数据表。你说原始文件是一个带有宏的模板,在我的测试中,这没有什么区别。您是否已使用可能不同的文件测试了此代码,以至少消除该文件的问题?请检查以下内容:
新对象(EDT.Rows.Count-1,EDT.Columns.Count-1)
对于r as Integer=0到EDT.Rows.Count-1,以及如何检查该文件?这只是数组大小声明@Dang D.KhanhI认为它可能是:
Dim arr(EDT.Rows.Count-1,EDT.Columns.Count-1)作为对象
。如果我真的这么说,我是从堆栈中复制的,以搜索“如何使用范围将数据插入excel”,所以我可以按照您的建议尝试,但我认为这不是问题@该死的卡恩,一定还有别的事。在我使用您发布的代码进行的测试中,没有出现您描述的错误,代码在几秒钟内成功地运行了一个包含10列和100行的数据表。你说原始文件是一个带有宏的模板,在我的测试中,这没有什么区别。您是否使用可能不同的文件测试了此代码,以至少消除该文件的问题?这是我最初尝试的。您所做的是一次为特定单元格添加值。我这么做了,但是微软的互操作服务非常慢。我有一个SSD,大约用了5分钟来填充20x10(rowsx列)的数据。所以我研究了互联网,了解到增加数据使用范围,而不是像这样使用。讽刺的是,我的代码在我声明的其他方法中运行良好,没有错误。主要的问题是我不明白错误在说什么。若我并没有捕捉到它,那个么它就通过了,文件被完美地生成了,但这并没有什么好处。我还有一个宏文件.xlsm.com。互操作不是最好的。看看ePlus。你可以免费试用。我认为它有一个有用的方法<代码>ws.Cells[“A1”].LoadFromDataTable(dataTable,true)我尝试了EPPlus、OpenXML、ClosedXML(长期使用ClosedXML,但最近的更新开始导致损坏我的模板文件。我也在ClosedXML git上打开了一个问题)除了我的模板文件之外,其他一切都让我头疼。我必须转换到interop,因为它不会损坏文件。我找到的最好的方法是射程转移。它转移得更快。所有数据传输大约需要3-4分钟。但是这
ws.Cells[“A1”].LoadFromDataTable(dataTable,true)
会调整dataTable的列和行吗?比如,如果我想从B11单元开始,一行一直到F11,它会写在下一行吗?询问是因为我害怕触碰当前代码。@bonny看到了,等等,这就是我最初尝试的。您所做的是一次为特定单元格添加值。我这么做了,但是微软的互操作服务非常慢。我有一个SSD,大约用了5分钟来填充20x10(rowsx列)的数据。所以我研究了互联网,了解到增加数据使用范围,而不是像这样使用。讽刺的是,我的代码在我声明的其他方法中运行良好,没有错误。主要的问题是我不明白错误在说什么。若我并没有捕捉到它,那个么它就通过了,文件被完美地生成了,但这并没有什么好处。我还有一个宏文件.xlsm.com。互操作不是最好的。看看ePlus。你可以免费试用。我认为它有一个有用的方法<代码>ws.Cells[“A1”].LoadFromDataTable(dataTable,true)我尝试了EPPlus、OpenXML、ClosedXML(长期使用ClosedXML,但最近的更新开始导致损坏我的模板文件。我也在ClosedXML git上打开了一个问题)除了我的模板文件之外,其他一切都让我头疼。我必须转换到interop,因为它不会损坏文件。我找到的最好的方法是射程转移。它转移得更快。所有数据传输大约需要3-4分钟。但是这
ws.Cells[“A1”].LoadFromDataTable(dataTable,true)
会调整dataTable的列和行吗?比如,如果我想从B11单元开始,一行一直到F11,它会写在下一行吗?询问是因为我害怕触碰当前代码。@bonny See等等