powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как НЕ открывая *.dbf скопировать содержимое в Excel
10 сообщений из 10, страница 1 из 1
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34185357
Сергей-1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создал программу, которая обрабатывает dbf-файлы. Каждый месяц их около 19...22 для одного района. А таких районов может от 6 и до ..... короче много. Сначала я обрабатывал файлы последовательно:открываю Ф1, копирую в нем нужные мне ячейки, вставляю в новую книгу, закрываю Ф1, открываю Ф2, копирую, вставляю, закрываю Ф2, ....... Потом все повторяю для следующего района и т.д. Но все это работало долго.

Затем я попробовал сначала одним махом открывать все файлы для одного района, а потом из них копировать данные и вставлять в новую книгу (цикл J повторяется столько раз сколько открыто файлов, начиная со второго, а первый - это где я все собираю за месяц).

Set xlApp = CreateObject("Excel.Application")
...........
With xlApp
For J = 1 To N
.......
K = UBound(.Workbooks(2).ActiveSheet.Cells.CurrentRegion.Value, 1)
.Workbooks(2).Worksheets(1).Range("A2:J" & K).Copy
.Workbooks(1).Worksheets(1).Paste
.Workbooks(1).Worksheets(1).Range("A" & Y).Select
.Workbooks(2).Close False
.......
Next J
End With

Начало работать побыстрее, но мне надо намного быстрее!!!! т.к. файлов очень много и скорость обработки файлов здесь играет более существенную роль, чем даже размер кода программы.
Подозреваю, что можно копировать данные не открывая файлы, но как??? (это кстати помогло бы и при формировании ежедневных dbf, которые как я говорю в конце месяца собираются в один файл).

Поможите мне пожалуйста кто чем сможет.
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34185601
ffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какова структура файлов? Меняется она или постоянна? Меняются ли имена? Какой формат? DBF-ы бывают разные? Какая кодовая страница?
На одной машине идет обработка или на разных?
Очень много вопросов.
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34185645
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делать выборку из ДБФ посредством SQL и потом CopyFromRecordset в нужную книгу

алгоритм примерно такой
Код: plaintext
1.
2.
3.
4.
For i=1 to Кол-во ДБФ
  rs.Open "SELCT * FROM [имя файла]"
  нужная книга и лист.Range("A1").CopyFromRecordset
  rs.close
next

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34185742
Сергей-1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Структура - постоянная, имена файлов в виде - <название района><_ммдд_><К>.dbf или <название района><_ммдд_><Д>.dbf (т.е. К собираются в итоги по Кредиту, а Д - в итоги по Дебету). Обрабатывается все на одной машине. Хотя программа универсальная - работает на любом ПК и в любом месте (об этом то я позаботился).
Я ж говорю - все работает, проблема теперь только в скорости.

Например на процессоре с частотой 950MHz - каждый месяц обрабатывается примерно за 500 сек, а на 3200MHz - примерно за 45...50 сек. После того как я то там, то сям надобавлял ExecuteExcel4Macro, ну и просто оптимизировал алгоритм работы программы итоги стали формироваться за 100!!! и за примерно 35 сек соответственно. Но мне этого мало (точнее - много)!!!! Надо ещё быстрее.

Щас буду эксперементировать с тем, что предложил HandKot
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34185829
ffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно, быстрей всего получится, если написать небольшую программку на FoxPro, которая со своими Native данными работает очень быстро. Запросами объединять все dbf-ы и экспортировать их в любой формат (хоть dbf, хоть Excel).
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34185857
Сергей-1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я тоже знаю. Но у меня уже есть программа - на VB. И я просто хочу чтобы она работала ещё быстрее. Может конечно я слишком многого хочу. Но я так понимаю, что многие программеры не довольны своими программами и постоянно пытаются их улучшить, хотя улучшать вроде уже некуда. (а у меня пока ещё есть что улучшить, вот я над этим и бьюсь)
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34187142
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBA не очень подходящая система для скоростных программ.
Я подобную задачу решал когда-то сначала на Clipper, потом переписал на ANSI C.
Читал из нескольких dbf данные по одному бизнес-объекту, группировал их как надо, суммировал, потом формировал csv файл с итоговыми результатами и загружал в Экселевский шаблон.
Получалось примерно по полчаса на два гигабайта dbf-ок.
Потом на основе этой отчетной системы сделал конвертор, перегнал все dbf-ки в базу данных и все проблемы исчезли вообще :)
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34187155
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей-1977Это я тоже знаю. Но у меня уже есть программа - на VB. И я просто хочу чтобы она работала ещё быстрее.
Поскольку исходный формат - DBF, так и для скоростной работы надо что-то из серии СУБД...
Поскольку от исходного формата не отказываешься - то все равно придется обращаться
к средствам СУБД, а уж что выберешь (ADO,SQL,Fox,Access)- твое дело.
Но тебе правильно посоветовали - напиши небольшую программу сборки-экспорта на Фоксе
(или обратись в соответствующий форум), а затем вызывай ее из VB шеллом.
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34192761
Сергей-1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Урааа!!!! Скорость программы увеличилась примерно процентов на 40 (т.е. на 950MHz вместо 100 сек уходит теперь на обработку примерно 55...60 сек, т.е. почти как раньше на 3200MHz!!!!!!). На 3200MHz ещё не проверял - некогда, да и просто дальше оптимизирую программу.

По поводу на чем писать программу. Поясню ещё поподробнее.
Приходят файлы сначала в архиве под паролем (пароли разные, но закономерность известна -> это дело, т.е. извлечение файлов из архива можно автоматизировать). В архиве находятся *.xls файлы, причем их там куча, из которых мне нужны не все, а только некоторые. Далее, их (*.xls) на каждый нужный мне район может быть несколько (бывает до 10), поэтому потом я их собираю в один для каждого района (т.е. вместо 30...40 или более полчается штук 6 или чуть более в зависимости от кол-ва районов). Далее разбиваю такие файлы на 2 - дебет и кредит (вот они и появляются, родные!!! *.dbf). И так каждый день.

А в конце месяца я формирую 2 итоговых xls-файла (дебет и кредит), в которых каждая страница есть какой-то конкретный район, куда в каждую страницу (то бишь район) и собираются за месяц соответствующие dbf-файлы.

Пропустить создание dbf-файлов нельзя, т.к. данные из этих файлов импортируются в другую программу, где далее и обрабатываются.

Поэтому и стоит задача - просто ускорить её работу. Теперь задача с обработкой dbf-файлов снята с повестки дня. Теперь я голову ломаю над другой задачей, как-бы ускорить собирание xls-файлов (после извлечения их из архива). У кого есть какие дельные советы, можете подсказать. Мне главное, чтобы мне просто намекнули - в каком направлении двигаться, а дальше я уж все сделаю сам.
Так что если есть мысли, то подпните меня в нужном направлении.
...
Рейтинг: 0 / 0
Как НЕ открывая *.dbf скопировать содержимое в Excel
    #34192774
Сергей-1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ускорение кстати произошло за счет SQL-запросов.

А вообще-то конечно, раньше, когда файлы присылали сразу в dbf-формате, то и программа соответственно была на FoxPro. Потом, уроды, что присылают нам файлы, изменили его формат на xls, поэтому и мне пришлось под них подстраиваться
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как НЕ открывая *.dbf скопировать содержимое в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]