Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация вставки данных в EXCEL / 10 сообщений из 10, страница 1 из 1
18.07.2017, 17:36
    #39491044
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
Выгружаю массив на лист, и потом вставляю комментарии.
Как ускорить вставку комментарий?

комметарии содержаться в массиве
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
                
        For r = 0 To UBound(shmk_var_temp, 2)
                rr = collect_article(shmk_var_temp(0, r)) 'коллекция строка
                cc = collect_store(shmk_var_temp(1, r)) 'коллекция столбец
                With .Cells(rr, cc)
                        .AddComment Replace(shmk_var_temp(3, r), "|", Chr(10))
                        .Comment.Shape.Placement = xlMove
                        .Comment.Shape.OLEFormat.Object.AutoSize = True
                        .Comment.Visible = False
                End With           
        Next



отключаю

Код: vbnet
1.
2.
3.
4.
5.
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.DisplayStatusBar = True
    Application.DisplayAlerts = True



комметариев почти 10 000, и вот уже день потратил, не знаю как ускорить
...
Рейтинг: 0 / 0
18.07.2017, 17:37
    #39491045
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
вот так отключаю
Код: vbnet
1.
2.
3.
4.
5.
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Application.DisplayStatusBar = False
    Application.DisplayAlerts = False
...
Рейтинг: 0 / 0
18.07.2017, 17:44
    #39491061
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
Focha,

Сначала поместить все комментарии в массив, а потом выгружать его на лист. Обращение к каждой отедльной ячейке весьма неэффективный метод.
...
Рейтинг: 0 / 0
18.07.2017, 17:50
    #39491074
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
iMrTidyFocha,

Сначала поместить все комментарии в массив, а потом выгружать его на лист. Обращение к каждой отедльной ячейке весьма неэффективный метод.
проблема именно в этом, я не знаю как вставить массив в виде комментарий, а если например array(5,10)="" мне не нужно вставлять комментарий.
...
Рейтинг: 0 / 0
25.07.2017, 14:00
    #39494579
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
Focha,

рассмотрите вариант использования библиотек для работы с Excel типа epplus.
...
Рейтинг: 0 / 0
25.07.2017, 14:39
    #39494618
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
FochaiMrTidyFocha,

Сначала поместить все комментарии в массив, а потом выгружать его на лист. Обращение к каждой отедльной ячейке весьма неэффективный метод.
проблема именно в этом, я не знаю как вставить массив в виде комментарий, а если например array(5,10)="" мне не нужно вставлять комментарий.

Excel не рассчитан на "жесткую" работу с комментариями. Взять для примера вставку 1 млн простых формул, это займет пару секунд, в то время как вставка 10 000 комментариев займет секунд 5. Есть один способ ускорить работу, но это потребует некоего "шаманства":
1. Создается один пустой комментарий.
2. Этот комментарий копируется в ячейки назначения при помощи PasteSpecial. - Этот шаг занимает больше всего времени из алгоритма.
3. Итерация через все комментарии с заменой текста на нужный. - Для 10 000 комментариев заняло несколько миллисекунд.

Код: vbnet
1.
2.
3.
For l = 1 To sh.Comments.Count
    sh.Comments(l).Text "test"
Next



Если такой способ не поможет, то остается только Open XML SDK, но это уже и язык другой.
...
Рейтинг: 0 / 0
27.07.2017, 09:51
    #39495758
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
iMrTidyFochaпропущено...

проблема именно в этом, я не знаю как вставить массив в виде комментарий, а если например array(5,10)="" мне не нужно вставлять комментарий.

Excel не рассчитан на "жесткую" работу с комментариями. Взять для примера вставку 1 млн простых формул, это займет пару секунд, в то время как вставка 10 000 комментариев займет секунд 5. Есть один способ ускорить работу, но это потребует некоего "шаманства":
1. Создается один пустой комментарий.
2. Этот комментарий копируется в ячейки назначения при помощи PasteSpecial. - Этот шаг занимает больше всего времени из алгоритма.
3. Итерация через все комментарии с заменой текста на нужный. - Для 10 000 комментариев заняло несколько миллисекунд.

Код: vbnet
1.
2.
3.
For l = 1 To sh.Comments.Count
    sh.Comments(l).Text "test"
Next



Если такой способ не поможет, то остается только Open XML SDK, но это уже и язык другой.


я не понял в чем прикол, можете мне подсказать.
ранее recorsed я заливал в массив(shmk_var_temp), после пробегал данный массив.
Я решил не заливать recorsed в массив, и просто пройтись по recorsed, и вставка комментариев сократилась до нескольких секунд.
У меня есть предположение, потому что массив был типа variant, следовательно выделялось много памяти и требовалось больше времени? правильно я понял?
...
Рейтинг: 0 / 0
27.07.2017, 10:08
    #39495771
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
FochaiMrTidyпропущено...


Excel не рассчитан на "жесткую" работу с комментариями. Взять для примера вставку 1 млн простых формул, это займет пару секунд, в то время как вставка 10 000 комментариев займет секунд 5. Есть один способ ускорить работу, но это потребует некоего "шаманства":
1. Создается один пустой комментарий.
2. Этот комментарий копируется в ячейки назначения при помощи PasteSpecial. - Этот шаг занимает больше всего времени из алгоритма.
3. Итерация через все комментарии с заменой текста на нужный. - Для 10 000 комментариев заняло несколько миллисекунд.

Код: vbnet
1.
2.
3.
For l = 1 To sh.Comments.Count
    sh.Comments(l).Text "test"
Next



Если такой способ не поможет, то остается только Open XML SDK, но это уже и язык другой.


я не понял в чем прикол, можете мне подсказать.
ранее recorsed я заливал в массив(shmk_var_temp), после пробегал данный массив.
Я решил не заливать recorsed в массив, и просто пройтись по recorsed, и вставка комментариев сократилась до нескольких секунд.
У меня есть предположение, потому что массив был типа variant, следовательно выделялось много памяти и требовалось больше времени? правильно я понял?

Разве что, если на компьютере мало памяти, но мне кажется это маловероятным. А я правильно понимаю, что исходные данные Вы получаете SQL запросом? А Вы можете замерить время по каждому этапу, до и после изменений?
...
Рейтинг: 0 / 0
10.08.2017, 12:23
    #39503268
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
iMrTidyFochaпропущено...



я не понял в чем прикол, можете мне подсказать.
ранее recorsed я заливал в массив(shmk_var_temp), после пробегал данный массив.
Я решил не заливать recorsed в массив, и просто пройтись по recorsed, и вставка комментариев сократилась до нескольких секунд.
У меня есть предположение, потому что массив был типа variant, следовательно выделялось много памяти и требовалось больше времени? правильно я понял?

Разве что, если на компьютере мало памяти, но мне кажется это маловероятным. А я правильно понимаю, что исходные данные Вы получаете SQL запросом? А Вы можете замерить время по каждому этапу, до и после изменений?
10000 комментариев через массив, вставлялись минут 13
без массива, а сразу через rst 40 секунд
Думаю проблема не в памяти 8ГБ на компе, а в типах данных, variant весит много, следовательно, нужно больше времени.
...
Рейтинг: 0 / 0
10.08.2017, 15:44
    #39503482
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация вставки данных в EXCEL
FochaiMrTidyпропущено...


Разве что, если на компьютере мало памяти, но мне кажется это маловероятным. А я правильно понимаю, что исходные данные Вы получаете SQL запросом? А Вы можете замерить время по каждому этапу, до и после изменений?
10000 комментариев через массив, вставлялись минут 13
без массива, а сразу через rst 40 секунд
Думаю проблема не в памяти 8ГБ на компе, а в типах данных, variant весит много, следовательно, нужно больше времени.

Странно, но интересно. 10 000 записей в массиве для компьютера в памяти это ни о чем.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация вставки данных в EXCEL / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]