![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 16.07.2008
Сообщений: 2
|
![]()
Есть прога обрабатывающая 2 файла эксель.
Берется значение из файла 1, исчется соответствие в файле 2 и возвращается в файл 1. Файлы порядка 3к позиций. Прога работает несколько часов. Как оптимизировать? Где самые большие задержки могут быть? |
![]() |
![]() |
![]() |
#2 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
При правильном написании кода программа отработает максимум за 1 - 2 секунды. Цитата:
Выкладывайте файл с "прогой" - посмотрим, что можно сделать... |
||
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 16.07.2008
Сообщений: 2
|
![]()
Писалось а 5-ой делфе. Больше не умею
![]() ВОбщем принцип работы проги: Берется код позиции №1 в первом файле (заданный столбик) Путем перебора ищет этот код во втором файле(в заданном столбике) Берет значение из соседнего столбика, преобразует по заданному алгоритму и возвращает в первый файл. Переходит к следующей позиции Последний раз редактировалось dinon; 30.04.2009 в 16:55. Причина: не дописал |
![]() |
![]() |
![]() |
#4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Ваша программа работает долго из-за того, что для каждой строки обрабатываемого файла Вы производите поиск в другом файле, перебирая ячейки того файла в цикле.
Варианты решения: 1) Считываем данные с листов этих файлов в массивы (получая при этом 2 двумерных массива). Обрабатываем эти массивы, после чего записываем массив на лист. Скорость обработки файлов возрастёт в тысячи раз. 2) Запрашиваем пути к файлам, открываем обрабатываемый файл, в нужный столбец одной командой прописываем формулу (примерно так: ISheet_Catalog.Range['d2 : d3000'].FormulaLocal := '=ВПР(тут формула)'), запускаем пересчёт, затем заменяем формулы значенями (строкой типа ISheet_Catalog.Range['d2 : d3000'].Value := ISheet_Catalog.Range['d2 : d3000'].Value) 3) Отказываемся от программы. В обрабатываемый файл в нужные ячейки пишем формулу, ссылающуюся на второй файл. При открытии основного файла он сам обновит данные. 4) Реализуем всю функциональность средствами VBA PS: C синтаксисом Delphi незнаком, так что подправить программу не смогу. А зачем Вам нужна именно внешняя программа для обработки файлов? Чем Вас не устраивает обработка данных средствами Excel? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите с программированием обработки файлов (Pascal) | Дима82 | Помощь студентам | 2 | 25.05.2008 13:05 |
Помогите с программированием операций обработки файлов(Pascal) | Дима82 | Помощь студентам | 11 | 24.05.2008 18:02 |
Программирование операций обработки файлов | Дима82 | Фриланс | 1 | 19.05.2008 13:57 |
Оптимизация | Terran | Общие вопросы Delphi | 3 | 03.05.2008 19:03 |
Макрос в Excel для обработки группы файлов | ad_sum | Microsoft Office Excel | 1 | 29.12.2007 16:56 |