|
|
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayЯ все-таки склоняюсь к мысли, что 20000 ячеек не так много, и для этого случая должны были уже изобрести какой-то нормальный способ. Ведь работают же с терабайтными базами. Если попробовать вставить данные из Аксесса (1500 строк и 13 столбцов), то это делается почти мгновенно. А здесь очень медленно Вы не путайте, эксель не является СУБД и не оптимизирован на работу с данными motorwayAntonariy, ну, а допустим мы это строку будем записывать в БД сначала, а потом оттуда брать данные - так можно рассчитывать на нормальную скорость? Нет. Тормоза идут не при получении данных, а при работе с ячейками. Это (если в лоб) непреодолимое препятствие. Поскольку исходными данными является строка, то нет смысла грузить ее в базу. То бишь, вы можете создать csv-файл (просто заменив "|" на ",", а "`" на конец строки. Это позволит очень быстро загрузить данные в эксель (не устраивая этот тормозной цикл). Но вы хотите красить ячейки на ходу - и вот тут начинается проблема тормозами. Поскольку ваша задача не совсем ясна, да и часть кода вы нам не дали, мы не можем дать более точный совет. Возможно вам вообще не нужен эксель и можно обойтись аксессом или, скажем, веб-клиентом. Всякие покраски можно тоже реализовать иначе (но, правда, для этого иначе должны формироваться исходные данные). Скажем, располагаться рядом ячейки со старым и новым значением. А покрасить изменившиеся можно (если не ошибаюсь) формулой или пробежаться макросом уже после загрузки данных. В общем, если хотите глобальных советов - придется вам развернуть контест как можно подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2010, 23:51 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Моя система состоит из Эксела и скрипта на сервере, производящего вычисления. Работает это по типу SaaS. Производятся некоторые вычисления, например, финансовые. Для этого данные из Эксела посылаются скрипту, он вычисляет всё и возвращает результат. Эксел нужен для удобного ввода данных - формулы+значения+редактирование таблицы (стили, шрифты и т.п.). Т.е. почти все как в обычном Экселе, только данные посылаются скрипту. Веб-клиентом я пробовал обойтись, но там не хватает многих функций Эксела. Именно Эксел вполне удобное средство для ввода данных и их просмотра. Главное, чтобы все это работало с приемлемой скоростью. Та система, какая сделана сейчас - тормозит. Наверно, сюда можно приделать либо Аксесс, либо сохранять и загружать все данные из MySQL на сервере, но главное, чтобы тоже было быстро. И куда деться от этих тормозов? Основные вещи делают макросы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 00:33 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Не, ну система понятна (значит варианты клиента, кроме экселя, не обсуждаем), но вы не уловили главного. Запись с помощью макроса такого объема данных - процесс долгий. Чтобы принципиально его ускорить - надо отказаться от записи ячеек макросом (один из вариантов - csv - я предложил). Но сложно предполагать, что там у вас с форматированием и т.п. Кстати, вы упоминали о том, что можно было бы передавать только измененные данные - до какого количества ячеек это уменьшит объем передаваемых данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 00:48 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Насчет того, что макросы долго все это делают, я уловил, конечно - потестил, и настроение подпортилось. В таблице может быть большое количество ячеек с разными шрифтами, стилями и примечаниями. Вот, кстати, обработка примечаний - еще одна медленная вещь. Мне нужно скидывать иногда текст из примечаний в ячейки сами - и для такой таблицы это тоже долго очень. Тут уж вряд ли что-то поможет, может, у вас тоже идеи есть? :) Если только изм. передавать - ну это смотря сколько менять на входе и сколько при этом меняется в результатах. Допустим, изменили 1 ячейку. При этом может измениться в результатах 1-10, а иногда может и много - может быть, даже 1000. А вот если менять штук 10-100, то может большая часть, около 50% измениться. То есть, сокращение может быть от 2 до 100 раз где-то, я думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 01:17 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Основные тормоза в данном случае из-за кучи обращений к отдельным ячейкам (проверка цвета, присвоение значения, присвоение цвета). Присваивайте значения одной командой - через массив или Recordset. Аналогично надо сделать и с раскраской. В итоге все будет работать моментально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 09:51 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Если вместо Range использовать Cells, будет быстрее. Однако, чем, собственно, не устраивает генерация уже готового и раскрашенного файла на сервере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 10:38 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Набросал простенький примерчик - 50 тыс строк заносятся и форматируются примерно за секунду: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 12:04 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Shocker.ProПоскольку исходными данными является строка, то нет смысла грузить ее в базу. То бишь, вы можете создать csv-файл (просто заменив "|" на ",", а "`" на конец строки. Это позволит очень быстро загрузить данные в эксель (не устраивая этот тормозной цикл). Но вы хотите красить ячейки на ходу - и вот тут начинается проблема тормозами. Есть, кстати, еще один примитивный способ быстрого создания и заполнения Excel-евского файла, кроме того что я привел чуть выше. Просто создаем htm-файл с таблицей, заполняя его нужными строками с нужным форматированием, потом открываем его Excel-ем, делаем окончательную обработку/форматирование и сохраняем его уже в формате Excel. Дюже просто и сердито. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 12:24 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
AntonariyОднако, чем, собственно, не устраивает генерация уже готового и раскрашенного файла на сервере? Допустим, пользователь считает какую-то финансовую модель и нажимает кнопку "Вычислить". При этом он ожидает сразу увидеть результаты, а не скачивать еще один файл с результатами. Так будет долго и неудобно. А насчет Recordset - получится ли быстро считать около 10000 примечаний и поместить их в ячейки и наоборот, из ячеек в примечания? И раскраска - красятся же отдельные ячейки, можно ли их быстро закрасить таким способом, чтобы было за секунду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 17:23 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
AndrF, а что нужно дополнительно сделать, чтобы ваш пример работал? Пишет "User-defined type not defined" про Recordset ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 17:25 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayAndrF, а что нужно дополнительно сделать, чтобы ваш пример работал? Пишет "User-defined type not defined" про Recordset Добавить референс на Microsoft ActiveX Data Objects ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 17:29 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Я сначала пробовал добавить, но другую - ADO. Получилось. А можно примерно таким же образом добавлять примечания или формулы в ячейку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 18:37 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Я пока что не очень понял, будет ли такой способ нормально работать, если у нас есть список ячеек, который хотим обновить и значения для них (либо второй вариант - формулы, третий - примечания)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 19:38 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayЯ пока что не очень понял, будет ли такой способ нормально работать, если у нас есть список ячеек, который хотим обновить и значения для них (либо второй вариант - формулы, третий - примечания)? Надо разбираться. По крайней мере для тупого заполнения таблицы и раскраски ее по формуле пример я привел. Остальное за так делать хоть и не столь сложно, но уже и не интересно ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 22:29 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
А у 2007-го еще проще - посмотрел сейчас структуру xlsx-файла (можно открыть тем же WinRar-ом) - с ней вполне можно разобраться даже без описания. По крайней мере это явно не сложней чем chm-файлы, которые когда-то приходилось создавать из программы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2010, 22:49 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
По сути, вот, что мне нужно - просто надежные способы: 1) быстро считать содержимое большого кол-ва ячеек, так чтобы его можно было послать на сервер/сохранить в файл. 2) быстро изменить содержимое большого кол-ва ячеек - присвоить значения (здесь может подойти вариант с csv или др.). 3) быстро считать содержимое большого кол-ва примечаний, чтобы можно было на основании их изменить содержимое ячеек/либо сохранить все примечания в файл. 4) быстро изменить большое кол-во примечаний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 00:11 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayПо сути, вот, что мне нужно - просто надежные способы: 1) быстро считать содержимое большого кол-ва ячеек, так чтобы его можно было послать на сервер/сохранить в файл. 2) быстро изменить содержимое большого кол-ва ячеек - присвоить значения (здесь может подойти вариант с csv или др.). 3) быстро считать содержимое большого кол-ва примечаний, чтобы можно было на основании их изменить содержимое ячеек/либо сохранить все примечания в файл. 4) быстро изменить большое кол-во примечаний. 1 и 2 проблем вообще нет - см выше, там было показано. Как и с форматированием зависящим от значений ячеек все примитивно. Самое сложное тут 3 и 4 - доступ к примечаниям по одному через объектную модель по одному будет все дико тормозить, а иначе вроде и невозможно. Так что если они действительно нужны, то реализовать все быстро можно только через самостоятельное создание xlsx/xlsm файла, разобравшись в его структуре - оно достаточно просто даже без изучения документации. Заодно и без Excel-я на компе тогда можно будет обойтись (если не конвертировать в старые версии Excel)... Для упрощения работы можно использовать заготовку, просто добавляя в нее нужные строчки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 01:46 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Можно еще здесь почитать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 01:49 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
AndrFТак что если они действительно нужны, то реализовать все быстро можно только через самостоятельное создание xlsx/xlsm файлаЛучше чистого xml (Сохранить как — Таблица XML), с зипом заморачиваться не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 11:08 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
AntonariyAndrFТак что если они действительно нужны, то реализовать все быстро можно только через самостоятельное создание xlsx/xlsm файлаЛучше чистого xml (Сохранить как — Таблица XML), с зипом заморачиваться не надо. Ему примечания нужны, а как их запихнуть в чистый XML мне не ведомо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 15:14 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
AndrFЕму примечания нужны, а как их запихнуть в чистый XML мне не ведомо...Так ить "Сохранить как — Таблица XML"… Имеем результат: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 16:04 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Всё-таки XML мне не очень подходит - результат должен появляться в том же открытом файле Эксела. Если уж совсем ничего не будет получаться, я могу это попробовать, но это крайний вариант. И потом, у меня файл .xlsm. Примечания - довольно критичная для меня вещь, они используются по полной программе. И обновлять их и получать данные из них нужно быстро. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 16:19 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
motorwayВсё-таки XML мне не очень подходит - результат должен появляться в том же открытом файле Эксела. Если уж совсем ничего не будет получаться, я могу это попробовать, но это крайний вариант. И потом, у меня файл .xlsm. Примечания - довольно критичная для меня вещь, они используются по полной программе. И обновлять их и получать данные из них нужно быстро. :( Так формируешь файл XML (тупо текстом), и только потом открываешь его Excel-ем, далее сохраняешь уже в нужном формате... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 16:27 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
Т.е. вы имеете в виду перезапись - вместо текущего файла подставляется XML сгенерированный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 16:30 |
|
||
|
Долгая обработка текстовых данных в Экселе
|
|||
|---|---|---|---|
|
#18+
> Автор: motorway Почитав всю переписку, для себя я пришёл к следующему выводу. что для ускорения общей работы нужно - выбросить Ексель, вместо него написать специальную программу - перестроить схему работы следующим образом: Передача данных на сервер вычислителю -> вычислитель складывает обработанные данные в БД -> Программа выбирает данные для отображения и изменения из БД. Потому что вам нужно не просто отображение данных, а чуть-ли не on-line мониторинг, изменение и практически индивидуальное отображение каждого параметра. Ексель, со всей своей объектной структурой, не предназначен для мгновенного отклика. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2010, 16:54 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36546637&tid=2159730]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 303ms |

| 0 / 0 |
