Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2009, 15:37   #1
dinon
Новичок
Джуниор
 
Регистрация: 16.07.2008
Сообщений: 2
По умолчанию Оптимизация обработки файлов

Есть прога обрабатывающая 2 файла эксель.
Берется значение из файла 1, исчется соответствие в файле 2 и возвращается в файл 1.
Файлы порядка 3к позиций.
Прога работает несколько часов.
Как оптимизировать?
Где самые большие задержки могут быть?
dinon вне форума Ответить с цитированием
Старый 30.04.2009, 15:41   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Прога работает несколько часов.
Где самые большие задержки могут быть?
Вся программа - это одна большая задержка.
При правильном написании кода программа отработает максимум за 1 - 2 секунды.

Цитата:
Как оптимизировать?
Путём полного переписывания кода.
Выкладывайте файл с "прогой" - посмотрим, что можно сделать...
EducatedFool вне форума Ответить с цитированием
Старый 30.04.2009, 16:54   #3
dinon
Новичок
Джуниор
 
Регистрация: 16.07.2008
Сообщений: 2
По умолчанию

Писалось а 5-ой делфе. Больше не умею

ВОбщем принцип работы проги:
Берется код позиции №1 в первом файле (заданный столбик)
Путем перебора ищет этот код во втором файле(в заданном столбике)
Берет значение из соседнего столбика, преобразует по заданному алгоритму и возвращает в первый файл.
Переходит к следующей позиции
Вложения
Тип файла: rar Unit1.rar (2.4 Кб, 11 просмотров)

Последний раз редактировалось dinon; 30.04.2009 в 16:55. Причина: не дописал
dinon вне форума Ответить с цитированием
Старый 30.04.2009, 19:09   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ваша программа работает долго из-за того, что для каждой строки обрабатываемого файла Вы производите поиск в другом файле, перебирая ячейки того файла в цикле.

Варианты решения:
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?
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с программированием обработки файлов (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