Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 22
1

Получение данных из другой книги в больших объемах

28.09.2015, 16:59. Показов 465. Ответов 3
Метки нет (Все метки)

Доброго времени суток.
Вопрос возможно не новый на форуме, но имеющиеся ответы не дают полной информации.
суть вопроса:
Отдел работает в одном файле Excel вносит данные через форму. Размер файла к концу года растет до 3-5 Мб.
Для другого отдела работающего параллельно необходимо сформировать отчет в другом (своем) файле по данным первого файла.

Предпринятое решение:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Private Sub CommandButton1_Click()
Dim r As String
Dim t As String
Dim y As String
Dim u As String
r = "C:\Users\radul\Desktop\файлы Excel\Копия"
t = "Журнал вариант 3.xlsm"
y = "Журнал_проб"
 
For i = 1 To 1000
 
u = Cells(i, 1).Address
 
fgfgf(0, i) = GetValue(r, t, y, u)
Next i
Private Function GetValue(path, file, sheet, ref)
'   Retrieves a value from a closed workbook
    Dim arg As String
 
'   Make sure the file exists
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If
 
'   Create the argument
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
      Range(ref).Range("A1").Address(, , xlR1C1)
 
'   Execute an XLM macro
    GetValue = ExecuteExcel4Macro(arg)
End Function
при небольшом объеме исходного файла считывает данные со скоростью примерно 550 ячеек в секунду, при 5 Мб 2-3 ячейки в секунду. Время получения всех данных до 16 часов. Это много.
Вопрос: Есть ли другой способ решения задачи для получения данных с листа из области 20 000 строк и 150 столбцов приемлемое время около 15-20 секунд.
Дополнение: способ не должен зависеть от того открыт или закрыт файл первого отдела.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2015, 16:59
Ответы с готовыми решениями:

Получение данных из другой книги Excel
Существует Excel документ, допустим c://doc.xls с таблицей 3 на 4. Нужно создать макрос в другом...

Поиск ПО для контроля копирования данных в больших объемах в локальной сети
Добрый день. Есть задача отслеживать копирование данных в сети в больших объемах. есть готовое ПО...

Перенос данных с одного листа одной книги на другой лист другой книги с константой
Добрый вечер, товарищи! Есть прайс-лист, который содержит в себе много колонок и строк. На...

Продаю траф в больших объемах.
Продаю траф в больших объемах. По странам: uk.de.us.pl.it.fr. Траф продаю в одни руки. Цена...

3
6823 / 2765 / 520
Регистрация: 19.10.2012
Сообщений: 8,432
28.09.2015, 17:41 2
Конечно есть, и не один.
Я бы использовал getobject() и брал данные в массив, если хватает памяти то сразу все, если нет - то например по 50 столбцов.
Если влияет что файл открыт - можно делать его копию и открывать её.
Некогда пример файлов сейчас делать, чтоб код проверить, поэтому без кода.
Да код никто и не просил
1
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 22
28.09.2015, 17:50  [ТС] 3
Спасибо за вариант.
Буду пробовать.
Правильно ли я понял алгоритм действий:
1. Скопирован файл
2. Открыть скопированный файл.
3. Копировать в массив данные с нужного листа открытой копии
4. Закрыть копию
5. Удалить копию
6. Провести анализ данных в заполненном массиве.
0
6823 / 2765 / 520
Регистрация: 19.10.2012
Сообщений: 8,432
28.09.2015, 17:58 4
Да, можно так.
Анализировать массив намного быстрее, чем анализировать ячейки листа. Тем более что Вас ведь интересуют только данные, а не форматы/заливка или другие "красивости".
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2015, 17:58

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Падение сегментации при больших объемах распарсиваемого текста
вводят неопределенное кол-во строк double:text когда завершили ввод то жмут ентер потом вводим...

TP-link TL-PS310u при больших объемах печати(200+ документов) тп-линк зависает и документы теряются
Пришел работать на фирму админом. Один из принтеров подключен через вышеописанное устройство к...

Запрос данных из другой книги
есть небольшой модуль но действующий на одном листе полностью, Private Sub...

Запись данных в ячейку из другой книги
Есть файл VB.xlsm,в нём я создаю макрос,который должен брать данные из другого файла и записывать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.