将大视图导入Excel工作表

时间:2014-01-23 12:48:49

标签: excel vba dbf

我在vfp中创建了一个大视图。该观点达到了约400万的记录。我需要连接到它并将其导入excel工作簿。

导入错误时,工作表达到了极限(150万条记录)。

任何解决方案?我正在考虑将其导入到不同的工作表中但尚未找到解决方案。

2 个答案:

答案 0 :(得分:0)

这是MS Excel限制。你无法避免这种情况。或导出为另一种格式的Excel表格。

答案 1 :(得分:0)

对于excel来说,400万条记录实在太多了。但是,如果必须,您应该通过vba连接到dbf文件夹并手动将数据泵入excel。

但这确实很慢。

以下是您可以使用的代码。 它在每个工作表中导入1.5毫米线,这可能太多了。我会使用100.000行左右。但这就是你的电话

我没有运行它但应该是正确的。

 Option Explicit
 Sub import()

    Dim con As Object
    Dim rst As Object
    Dim sql As String
    Dim DbFolderPath As String
    Dim i As Long
    Dim ii As Integer

    DbFolderPath = ThisWorkbook.Path & "\"
    Application.ScreenUpdating = False
    Set con = CreateObject("ADODB.connection")
    con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DbFolderPath & ";Extended Properties=dBASE IV;"
    sql = "SELECT * FROM myquery"

    Set rst = CreateObject("ADODB.recordset")
    rst.CursorLocation = 3 'adUseClient
    rst.CursorType = 1 'adOpenKeyset

    rst.Open sql, con

    ReDim myValues(rst.RecordCount, 4)
    ThisWorkbook.Sheets(0).Activate
    i = 1
    ii = 0
    If Not (rst.EOF And rst.BOF) Then
        rst.MoveFirst
        Do Until rst.EOF = True
            Cells(i, 1) = rst!Field1
            Cells(i, 2) = rst!Field2
            rst.MoveNext
            i = i + 1
            If i > 1500000 Then
             i = 1
             ii = ii + 1
             ThisWorkbook.Worksheets.Add
             ThisWorkbook.Sheets(ii).Activate
            End If

        Loop
    Else
        GoTo cleanup
    End If
    Columns("A:B").EntireColumn.AutoFit
    GoTo cleanup
  Exit Sub
 cleanup:
    On Error Resume Next
    rst.Close
    con.Close
    Set rst = Nothing
    Set con = Nothing
    Application.ScreenUpdating = True
 Exit Sub
 End Sub