|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
30.10.2008, 12:28 | #1 |
Пользователь
Регистрация: 11.02.2008
Сообщений: 69
|
А можно побыстрей?
Приветствую. Вопрос значит следующий. Буквально вчера мне пришлось программно считывать данные из таблицы Word. Столбцов 14, строк 3418.
Вообщем запустил я программу для чтения данных из ворда за 2 часа до конца рабочего дня, но так и не дождался окончания сего процесса и оставил комп на ночь. На чтение одной строки уходит где-то 3 секунды. Вопрос: Можно ли как-то ускорить этот процесс и почему такие тормоза? Когда я сохраняю/загружаю эти 3000 строк из стринггрида в/из обычный(ого) txt это занимает пару секунд, а тут так долго. Комп нормальный. |
30.10.2008, 18:26 | #2 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Я вот решил проверить следующий код: Код:
До 200-й строки считывалось 10-20 строк в секунду, а потом начинались тормоза. (Word2003, WinXP)... После нескольких запусков кода тормоза начинаются раньше (с 90-й строки)... На системах типа Win98 некоторые тормоза Worda были объяснимы (исчерпывались ресурсы GDI и т.д.), а здесь вот я тоже понять не могу - из-за чего тормозит? |
|
31.10.2008, 06:19 | #3 |
Пользователь
Регистрация: 11.02.2008
Сообщений: 69
|
Ну вот собствено и код, ну я думаю дело не в нем. Получается что чем больше весит документ ворда, т.е. чем больше строк тем больше тормоза.
Для примера:1400 строк около 20 минут, а 3500 около 3 часов идет считывание. Код:
|
31.10.2008, 10:55 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Имеет смысл попробовать считать весь текст таблицы в переменную, а потом обрабатывать текстовую строку.
Например, так: Код:
Отрабатывает код моментально (если, конечно, вместо вывода значений через Debug.Print записывать эти значения сразу в переменные) Перевести код с VBA, думаю, проблем не составит. |
31.10.2008, 12:15 | #5 |
Пользователь
Регистрация: 11.02.2008
Сообщений: 69
|
Спасибо хорошая идея. Обязательно попробую
|
31.10.2008, 15:35 | #6 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Забыл сказать - в предложенном коде есть недоработка...
При разбивке переменной res на строки arr1 = Split(res, Chr$(13) & Chr$(7) & Chr$(13) & Chr$(7)) используется разделитель Chr$(13) & Chr$(7) & Chr$(13) & Chr$(7)), который также может встретиться в переменной res, если попадётся пустая ячейка в строке. То есть, если в таблице есть 5 пустых ячеек, то MsgBox Me.Tables(1).Rows.Count выдаст верный результат (например, 1300), а MsgBox UBound(arr1) выдаст 1305 Я вычислил разделитель строк путём анализа кодов символов строки res - и получил строку-разделитель Chr$(13) & Chr$(7) & Chr$(13) & Chr$(7), но, возможно, есть более правильный способ определения конца строки по тексту таблицы. Вообще, должно быть более простое (и в то же время быстрое) решение описанной Вами задачи... может, кто подскажет... Ну а если всё же использовать предложенный мной вариант, то можно избежать проблемы, изначально разбивая строку res на части, используя разделитель Chr$(13) & Chr$(7) - получится массив с количеством элементов, равным количеству ячеек (возможно, придётся удалить пустые элементы массива). После этого, зная количество столбцов, уже несложно в цикле обработать полученные данные. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли оптимизировать формулу? | дмидми | Microsoft Office Excel | 3 | 12.08.2008 11:28 |
Можно ли его расшифровать? | DenCraft | Фриланс | 4 | 24.02.2008 01:19 |
можно ли такое реализовать | Димарик | Общие вопросы Delphi | 6 | 22.07.2007 13:18 |
Можно ли программировать? | Умелец | Свободное общение | 13 | 23.03.2007 19:52 |
RichEdit. как можно вставлять картинку туда? как можно Скрол програмно вниз двигать? | Svop | Компоненты Delphi | 7 | 28.11.2006 21:07 |