|
|
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Мне просто нужно накапливать в массиве все ячейки, которые изменялись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 21:50 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayМне просто нужно накапливать в массиве все ячейки, которые изменялись Собственно, так этот код и должен работать. Попробуйте поставить там точку останова и пошагово посмотреть, что происходит при изменении РАЗНЫХ ячеек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 21:52 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorway, у меня так заработало (мессидж потом убери): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 23:06 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1) При заливке данных в коллекцию попадут все ячейки и смысл этой процедуры полностью теряется. С таким же успехом можно перебрать не коллекцию, а весь лист. 2) Заливка будет адски тормозить. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 12:40 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Кстати, это условие: Код: plaintext 1. 2. 3. 4. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 12:42 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Заметил одну вещь - обработка примечаний ускоряется, если не использовать массив SpecialCells (только ячейки с примечаниями), а просто написать 2-ной цикл по ячейкам. А вот насчет того, как лучше сделать - цикл со счётчиком или For Each - как быстрее? Хотя бы в теории (для данного случая). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2010, 00:07 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Antonariy, так что в итоге? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2010, 00:23 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Вот еще вопросик: может ли при выключенном обновлении экрана меняться курсор мышки с часов на просто курсор и обратно? Или всё время должен быть неподвижным - часы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2010, 22:02 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Получилось ускорить некоторые проблемные функции, где нужно было обновлять содержимое каждой ячейки. Сделал сначала запись в файл нужных данных, а потом вставку из него на лист. В таком варианте это занимает около 2 сек. А обновление примечаний, кстати, работает достаточно быстро само по себе. Если сделать таблицу 20 на 1000 с автозаполнением, и потом менять цифры, то примечания обновляются быстро. А вот Cells(i,j).Value - медленно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 23:06 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorway, Позвольте полюбобытствовать, вы все еще готовите презентацию для заказчика?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 23:08 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, да, как ни странно :) Характеристики быстродействия улучшились, так что поводов пролететь стало меньше. А посоветуйте, кстати, еще на одной вещи, если знаете: есть массив строк, в котором надо заменять знаки доллара на "пустое место", т.е. убирать их. Как более выгодно - заменять их в цикле для каждого такого элемента, или применить эту замену уже ко всей большой строке (около 200-400 кб)? Что-то мне подсказывает, что второй вариант лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 17:25 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayЧто-то мне подсказывает, что второй вариант лучше. Мне тоже подсказывает, однако вы задаете уже третий вопрос, который быстрее самому проверить, чем ждать ответа на форуме. Ибо нам тоже надо пробовать, чтобы дать точный ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 17:29 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Проверить можно, но я хотел получить именно аргументированные советы, почему лучше так или так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 17:31 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Скорее всего, в 1-м случае будет много накладных расходов на вызов функции много раз, хоть и объем данных будет меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 17:32 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayПроверить можно, но я хотел получить именно аргументированные советы, почему лучше так или так. По идее встроенная функция отработает быстрее, чем ваш собственный цикл, но все же лучше проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 17:34 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayПривет всем. Есть файл Эксела с рабочей областью около 20000 ячеек, с помощью макросов на VBA обеспечивается передача данных на сервер вычислителю и обработка поступивших от него данных. Данные посылаются и принимаются в виде строки. Для данного файла это около 200 кБ. Основная проблема во времени. Для 7000 ячеек, например, формирование строки занимает около 10 секунд, а обработка поступивших данных и их отображение в таблице - около 1 мин 20 сек. Для такого размера таблицы это много. А для 20000 ячеек вообще чуть ли не 20 минут все это делается. Конечно, можно передавать только изменившиеся по сравнению с прошлым вариантом ячейки, но если их будет много, то все равно нужно ускорить это. Сейчас все это делается в цикле, каждой ячейке присваивается полученное значение. Здесь в принципе тоже можно сократить объем данных, если обновлять только изменившиеся ячейки. Но даже так может получаться общее время около 1 мин. Нет ли способа принципиально это ускорить? Может быть, с помощью базы данных - генерировать файл БД в формате .mdb, а затем макросом вставлять данные из неё. Сам код функции разбора полученной с сервера строки (лишние маловажные части убраны): Код: plaintext 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. 34. 35. Что-то можно с этой проблемой сделать или нет (очень долгая обработка)? здесь явно не хватает (конечно, если у вас есть формулы в листах) Application.Calculation = xlCalculationManual Application.Calculation = xlCalculationAutomatic И форматирование, и особенно шрифт значительно затормаживает работу. Попробуйте прогоните ваш код без вставки в лист эксель, только обработка, вы увидите реальное время к которому вы можете стремится по загрузке данных данным способом. А вообще если данных много, то их нужно сначала поместить в массив, а затем вставлять, используя метод Range. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 17:53 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
ak787, выключения пересчета формул присутствует в другом месте. Шрифт я пока убрал, так как это достало меня - этот код (с учетом посылки данных на сервер и обработки там) быстрее 15 секунд для большого числа ячеек не хотел работать. В случае обновления малой части таблицы всё получалось за 5 где-то. Т.е. вся процедура работала за 5 секунд в лучшем случае. Сейчас я сделал вставку массива целиком, и 5 секунд - стабильное время даже для случая, когда надо всю таблицу обновлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 18:00 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
То есть, посылка на сервер занимает 3 секунды, обработка там 1-2, а этот код парсинга и вставки срабатывает где-то за 1 секунду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 18:02 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorway, имхо для базы данных думаю это хорошее время, если конечно случай типичный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 18:22 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Немного узнал про еще один способ решения проблемы со скоростью и др. - использовать для макросов C#. Только мне непонятно, как можно писать макросы на C#, или это уже не макросы, а возможно только использование dll / создание exe файла для работы с Экселом? Якобы на C# / VB.NET можно сделать многое, что и на VBA, но там будет быстрее. Если у меня сейчас есть макросы на VBA, это вообще реально переделать под .NET, чтобы все работало также? Я вообще не понимаю, как это может работать также, если VBA встроен в Эксел, а с .NET надо работать с помощью Visual Studio. Ведь, наверно, весь доступ к объектам Эксела будет таким же? Или там действительно какие-то новые возможности? Если конкретнее, я тут писал всякие примеры кода на VBA. Сделать то же самое на .NET, чтобы работало в Экселе - это реально или из разряда фантастики и смысла не имеет (т.е., посоветовали мне неправильно)? Как это туда встроить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2010, 23:10 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
1) Можно из .NET установить связь с экселем через COM и оперировать его объектной моделью. Но это очень тормознутый способ. 2) Можно писать отдельные самодостаточные модули на .NET (функции по обработке данных) и вызывать их из VBA. Ну что-то типа dll сделать. Работу с самими объектами экселя эти способы не ускорят. Только если какие-то функции анализа данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2010, 23:36 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
С этим ясно более-менее, спасибо. Также насчет проблемы представления данных (я писал о форматах в другой теме) - якобы с помощью VS можно обойти трудности представления текста вида [min,max]. В частности, есть такой формат, как binary decimal, если не ошибаюсь. Вы про него знаете что-нибудь в .NET? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2010, 00:36 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36615849&tid=2159730]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 354ms |

| 0 / 0 |
