我在vfp中创建了一个大视图。这个观点达到了约400万条记录。我需要连接它并将其导入到Excel工作簿中。将大视图导入excel工作表
虽然导入工作表达到的限制(约150万条记录)时发生错误。
任何解决方案?我正在考虑将它导入到不同的工作表中,但尚未找到解决方案。
我在vfp中创建了一个大视图。这个观点达到了约400万条记录。我需要连接它并将其导入到Excel工作簿中。将大视图导入excel工作表
虽然导入工作表达到的限制(约150万条记录)时发生错误。
任何解决方案?我正在考虑将它导入到不同的工作表中,但尚未找到解决方案。
这是MS Excel的限制。你无法避免这一点。或导出为Excel表格的另一种格式。
我可以将它导入到不同的wroksheets – user1912404
是的,当然。我认为Archlight的答案会帮助你。 – Oleg
对于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
嘿感谢您的代码。我面临的唯一问题是,我想查询一个视图 – user1912404
我的sqlquery如下所示:“select * from v_wldr1”代码没有找到视图,因为我只指示dbf文件夹路径而不是.dbc文件 – user1912404
Hov dbf的工作是这样的:该文件夹有点像数据库名称,文件是表或视图名称。所以你必须在文件夹中有一个名为v_wldr1.vue的文件。所以你应该可以使用select * from v_wldr1.vue。我不再为dbf文件编程。所以我不是100%确定的语法。但是请把它放在这里,或者在得到它时编辑我的答案。 – Archlight
这是一个关闭数据传输或你要多次运行的东西吗? – Archlight
以及最终用户可能需要连接到不同的相同的视图,但从不同的数据库。但它不是非常频繁地执行@Archlight – user1912404