Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как ускорить считывание ячеек из Excel в VB Добавлено: 06.05.09 13:52  

Автор вопроса:  Aleksandr | ICQ: 226010443 
Необходимо считать ячейки из Excel в массив Vb. Делаю примерно так:

Dim i as Integer
Dim strTabData(1 To 1000) As String
Dim wBook As Excel.Workbook

Set exapp = CreateObject("Excel.Application")
exapp.Visible = True
Set wBook = exapp.Workbooks.Open("d:\1.xls")

    For i = 1 To 1000
        strTabData(i) = wBook.Sheets(1).Cells(i, "A")
    Next i

Проблема в том что скорость считывания около 1000 строк в минуту. Есть ли возможность как нибудь ускорить этот процесс? А то файл очень большой и полное считывание займет где то сутки.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #1 Добавлено: 06.05.09 14:00
У меня тоже самое, в это весь эксель, он слишком интерактивный чтоб быть еще и быстрым.

Ответить

Номер ответа: 2
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #2 Добавлено: 06.05.09 16:24
попробуйте Application.ScreenUpdate=False, и вместо А в Cells ставьте смещение ячейки (0), сделайте его невидимым...

Ответить

Номер ответа: 3
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #3 Добавлено: 06.05.09 16:25
 а еще лучше - попробуйте работать с ним ч/з АДО рекордсет - может быть, что скорость и увеличится

Ответить

Номер ответа: 4
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #4 Добавлено: 07.05.09 19:17
Aleksandr, попробуйте так:
  1. Dim strTabData() As Variant
  2. strTabData = CreateObject("Excel.Application").Workbooks.Open("c:\1.xls").Worksheets(1).Range("A1:A1000").Value

Работает намного быстрее, правда массив будет двумерным strTabData(1 to 1000, 1 to 1)

Ответить

Номер ответа: 5
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #5 Добавлено: 11.05.09 15:56
Попробуйте вот этот код: в итоге Вы получите двумерный массив, обращаясь по первому измерению которого (столбцы) можно вторым измерением идти по строкам...

    
  1.  
  2. 'Открываем соединение
  3.     Dim c As New ADODB.Connection
  4.     c.Open "driver=Microsoft Excel Driver (*.xls); dbq=c:\11\dd.xls; Read Only=False;HDR=Yes;"
  5. 'Набор строк
  6.     Dim r As New ADODB.Recordset, cc As Long
  7.     r.CursorLocation = adUseClient 'это чтобы можно было узнать сколько строк мы выбрали
  8.     
  9.     cc = CLng(Timer) 'засекаем время
  10.     
  11. 'выбираем только из столбца А (page - это название листа)
  12.     r.Open "select * from [page$A:A]", c
  13.  
  14. 'наш массив
  15.     Dim a As Variant
  16.     a = r.GetRows(, 0)
  17.  
  18. 'засекаем, сколько все это заняло времени
  19.     cc = CLng(Timer) - cc
  20.  
  21. 'для примера читаем первую строку
  22.     MsgBox a(0, 1)
  23.  
  24. 'выводим время, за которое мы выбирали данные и впихивали их в массив
  25.     MsgBox "Time = " & CStr(cc) & " ms."
  26.     
  27. 'убираемся за собой (правило хорошего тона)
  28.     Set r = Nothing
  29.     c.Close
  30.     Set c = Nothing



Для общего развития по этой теме почитайте вот это:
http://www.askit.ru/custom/vba_office/m9/09_04_excel_connection.htm
http://www.w3schools.com/ado/met_rs_getrows.asp

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам