如何将数据导入重Excel文件

时间:2015-07-10 15:26:22

标签: vb.net excel

目标

将大约100多行数据导入工作表。很快。

当前问题

Excel文件不是很大(甚至不是1MB)。虽然,我们使用此Excel文件与SolidEdge进行通信,这使得它非常繁重。

目前,填充100行数据大约需要60秒。不要误解我,这不是很长。虽然我使用新的空Excel文件对其进行了测试,但填充数据的时间不到1秒。

代码

这是我的代码,因为我在那里做了一些愚蠢的事情:

Private Sub PopulateExcel()
    Dim xlApp As Excel.Application = Nothing
    Dim xlWorkBooks As Excel.Workbooks = Nothing
    Dim xlWorkBook As Excel.Workbook = Nothing
    Dim xlWorkSheet As Excel.Worksheet = Nothing
    Dim xlWorkSheets As Excel.Sheets = Nothing
    Dim Proceed As Boolean = False
    Dim RowIndex As Integer = 2
    Dim counter As Integer = 0

    xlApp = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)
    xlWorkBooks = xlApp.Workbooks

    For Each wb As Excel.Workbook In xlWorkBooks
        If wb.Name.Contains("301-AAAA-00X") Then
            xlWorkBook = wb
            xlWorkSheets = xlWorkBook.Sheets
            Exit For
        End If
    Next

    If xlWorkSheets IsNot Nothing Then
        For x As Integer = 1 To xlWorkSheets.Count
            xlWorkSheet = CType(xlWorkSheets(x), Excel.Worksheet)
            If xlWorkSheet.Name = "ImportSheet" Then
                Proceed = True
                Exit For
            End If
            Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkSheet)
            xlWorkSheet = Nothing
        Next
    End If

    If Proceed Then
        tspbProgress.Value = 0
        tspbProgress.Maximum = dic_Vars.Count
        tspbProgress.Visible = True

        For Each key As KeyValuePair(Of String, String) In dic_Vars 'Contains all my the data
            tsslStatus.Text = "Populating Excel: " & key.Key & " | " & key.Value
            xlWorkSheet.Cells(RowIndex, 2).value = key.Key
            xlWorkSheet.Cells(RowIndex, 3).value = key.Value
            RowIndex += 1
            IncProg()
        Next

        tspbProgress.Visible = False
        ReleaseComObject(xlWorkSheets)
        ReleaseComObject(xlWorkSheet)
        ReleaseComObject(xlWorkBook)
        ReleaseComObject(xlWorkBooks)
        ReleaseComObject(xlApp)
    End If
End Sub

Private Sub ReleaseComObject(ByRef obj As Object)
    Try
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
        obj = Nothing
    Catch ex As Exception
        obj = Nothing
    End Try
End Sub

结论

我正考虑创建一个新的Excel文件,在那里导入数据,然后只复制/粘贴到我们使用的真实Excel文件。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

非常感谢Byron Wall帮助我找到答案。我现在使用数组输入我的数据,而不是遍历每个单元格。

我根据变量字典的大小来创建我的数组并填充它。然后我使用下面的Resize()方法创建一个新范围。

一旦完成,一切都会立即填充!

If Not ActiveDocument.Tables(83).Columns(1).Range.Text = "=" Then
EntireRow.Select
Selection.Delete