2014-01-23 64 views
0

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

虽然导入工作表达到的限制(约150万条记录)时发生错误。

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

+0

这是一个关闭数据传输或你要多次运行的东西吗? – Archlight

+0

以及最终用户可能需要连接到不同的相同的视图,但从不同的数据库。但它不是非常频繁地执行@Archlight – user1912404

回答

0

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

+0

我可以将它导入到不同的wroksheets – user1912404

+0

是的,当然。我认为Archlight的答案会帮助你。 – Oleg

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 
+0

嘿感谢您的代码。我面临的唯一问题是,我想查询一个视图 – user1912404

+0

我的sqlquery如下所示:“select * from v_wldr1”代码没有找到视图,因为我只指示dbf文件夹路径而不是.dbc文件 – user1912404

+0

Hov dbf的工作是这样的:该文件夹有点像数据库名称,文件是表或视图名称。所以你必须在文件夹中有一个名为v_wldr1.vue的文件。所以你应该可以使用select * from v_wldr1.vue。我不再为dbf文件编程。所以我不是100%确定的语法。但是请把它放在这里,或者在得到它时编辑我的答案。 – Archlight