#0
by viktorovichvadim
Подскажите, кто работал с методами экселя: Например, имеется огромное число файлов Excel Задача: нужно перебрать все файлы в каталоге, зайти в каждый из них и считать информацию из нужной ячейки. Работает очень медленно. Если выкидываю строку XL = Новый ComОбъект("Excel.Application"); перед циклом, работает несколько быстрее, но все равно не так как хотелось бы. возможно, я как-то неправильно использую методы Excelя и можно изменить код и этим реально увеличить скорость обработки?
#6
by viktorovichvadim
в начале цикла должна соответствовать строка закрытия файла ТекФайлXLS.ПолноеИмя в конце цикла, т.к. видимо в екселе продолжают висеть открытые в предыдущих шагах цикла файлы. подскажите, как это сделать. :-) спасибо Rie, пока я писал сообщение - пришел ответ. буду сейчас тестировать
#9
by Fragster
а зачем каждый раз новый ком объект создавать? ИМХО гарбаж коллектор не успевает гoвно за этим кодом убирать... надо всем начинающим программистам в сях тренироваться с маллоком - может тогда и понимать что-нить начнут...
#15
by Rie
Если создаёшь какие-то переменные, ссылающиеся на листы, ячейки и т.д. - зануляй их, как сказано в , внутри цикла (кроме самого XL, разумеется - он будет нужен до окончания цикла)
#17
by viktorovichvadim
вроде так все и делаю, а смотрю в момент выполнения кода на процессы - эксель продолжает увеличивать пожираемую память..
#18
by Rie
Через несколько итераций выводи посмотри значение XL.Workbooks.Count - может, книги всё же не закрываются? Или воспользуйся .
#22
by viktorovichvadim
что такое 0, -1 жрет память - смотрю в диспетчере задач, процессы, excel.exe, в колонке память постоянно увеличивается значение (сейчас, например 146 000 Кб)
#28
by viktorovichvadim
пауза позволит снизить нагрузку на память, но как может от этого увеличиться скорость
#31
by Fragster
+ да и не скорость увеличиваем, а памяти потребление уменьшаем... по крайней мере мне так казалось..
#35
by Torquader
Память будет "жраться" из-за того, что Excel открывает книги. При этом, если даже книгу тут же закрывают, то "умный" Excel не сразу освобождает память. Также надо понимать, что OLE - очень медленная система. Поэтому, проще выбор написать в сценарии Excel, в Workbook_OnOpen в специальной книге, которую будут вызывать при открытии, а уже из этой книги можно будет перебрать все файлы Excel, так как всё это будет исполняться в рамках одного процесса и без торможений OLE при вызове RPC-методов. Попробуйте - разница очень ощутима.
#41
by viktorovichvadim
как на vba в ексель будет выглядеть макрос, который выбирает .xls - файлы из указанного каталога, заходит в каждый и считывает например значение ячейки А1? че то второй день пытаюсь написать (я мало знаком с vba), но без толку. Подскажите, кто в теме
#44
by viktorovichvadim
хочу проверить совет Torquader а можно подробнее я что-то в коде не наблюдаю как открываются файлы эксель, и с соответствующего листа из соответствующей ячейки берется нужное значение. к тому же xl файлы нужно выбирать из всех подкаталогов данного каталога
#45
by smaharbA
ну это извините, Вы просили перебор - получите - распишитесь если все паришься с заемом памяти делай и не парься, если евал возвращает строку то и это решается за недорого
#46
by hhhh
ты попробуй вручную открыть 30 или 40 файлов - быстро они у тебя будут открываться или медленно?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Excel -> 1C ("Excel.Application")
- Ошибка при: Excel = Новый COMОбъект("Excel.Application");
- Вопросы по COMОбъект("Excel.Application");
- Программно скопировать область из Excel книги 1 в Excel книгу 2
- Ошибка при работе с COMОбъект Excel.Application
- Как создать Новый COMОбъект("Excel.Application") без установленного Excel?
- Можно ли отредактировать файл Excel из 1С без установленного Excel?
- Есть разница в CreateObject("Excel.Application") и Новый COMОбъект("Excel.Applicatio
- новый COMОбъект("WIA.ImageProcess"); Ошибка при вызове конструктора (COMОбъект)
- ComОбъект. Табличная часть.
- Как пересохранить из нового Excel в старый Excel ?
- БП 8.3.5.1383 Ошибка COMОбъект("Excel.Application")
В этой группе 1С
- Запись не верна! Не совпадает активность записей.
- Ошибка совместного доступа к файлу
- Подключение к MySQL из 1С под Linux'ом
- Расшифровка таблицы Config. Узнать версию конфигурации средствами SQL
- Активизировать элемент справочника
- Вычисляемое поле в табличной части документа
- Активизировать поле документа из внешней обработки
- Изменить размер рисунка программно
- v7: изменение предела вычета НДФЛ в 1с:предприятие 7.7
- Ошибки при ЗагрузитьВнешнююКомпоненту
- Почему ВводДоступен возвращает ложь?
- v8: УПП Как настроить 1С чтобы оформлять реализацию товара без складских остатков
- v7: FIFO & LIFO в 1с:бухгалтерия(стандартная конфигурация)
- регистр оборотов - получение итогов
- выполнение задачи программно
- Что быстрее массив или список ?
- v7: Про счет Н07.02. Регистры формирования отчетных данных
- Загрузка ТЗ в Запрос и выполнение соединений
- Как узнать внутренний идентификатор элемента справочника?
- РЛС: параметры сеанса