2014-01-23 2 views
0

У меня есть большой вид, созданный в vfp. Взгляд достиг около 4 миллионов записей. Мне нужно подключиться к нему и импортировать его в книгу Excel.Импорт большого вида на рабочий лист Excel

При импорте произошла ошибка, когда рабочий лист достиг предела (1,5 миллиона записей).

Любые решения? Я собираюсь импортировать его в шланги на разные рабочие листы, но пока не нашел решений.

+0

Является ли это разовым datatransfer или чем-то, что вы собираетесь запускать несколько раз? – Archlight

+0

Ну, конечно, конечному пользователю может потребоваться подключение к другому виду, но из другой базы данных. Но его не очень часто делали @Archlight – user1912404

ответ

0

Это ограничение MS Excel. Вы не можете этого избежать. Или экспортировать в другой формат, установленный в листе Excel.

+0

Могу ли я импортировать его в куски для разных wroksheets – user1912404

+0

Да, конечно. Я думаю, что ответ Архлин поможет вам. – Oleg

0

4 миллиона записей действительно слишком много для превосходства. Но если вам нужно подключиться к папке dbf через vba и вручную накачать данные в 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

. Работа dbf выглядит так: папка похожа на имя базы данных, а файл - это имя таблицы или представления. поэтому в папке должен быть файл с именем v_wldr1.vue. Поэтому вы можете использовать select * из v_wldr1.vue. Я больше не программирую файлы dbf. Поэтому я не уверен на 100% относительно синтаксиса. Но, пожалуйста, поставьте его здесь или отредактируйте мой ответ, когда получите его. – Archlight

Смежные вопросы