|
|
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Я создал программу, которая обрабатывает 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, которые как я говорю в конце месяца собираются в один файл). Поможите мне пожалуйста кто чем сможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 10:39:43 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Какова структура файлов? Меняется она или постоянна? Меняются ли имена? Какой формат? DBF-ы бывают разные? Какая кодовая страница? На одной машине идет обработка или на разных? Очень много вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 11:30:47 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Делать выборку из ДБФ посредством SQL и потом CopyFromRecordset в нужную книгу алгоритм примерно такой Код: plaintext 1. 2. 3. 4. I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 11:39:52 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Структура - постоянная, имена файлов в виде - <название района><_ммдд_><К>.dbf или <название района><_ммдд_><Д>.dbf (т.е. К собираются в итоги по Кредиту, а Д - в итоги по Дебету). Обрабатывается все на одной машине. Хотя программа универсальная - работает на любом ПК и в любом месте (об этом то я позаботился). Я ж говорю - все работает, проблема теперь только в скорости. Например на процессоре с частотой 950MHz - каждый месяц обрабатывается примерно за 500 сек, а на 3200MHz - примерно за 45...50 сек. После того как я то там, то сям надобавлял ExecuteExcel4Macro, ну и просто оптимизировал алгоритм работы программы итоги стали формироваться за 100!!! и за примерно 35 сек соответственно. Но мне этого мало (точнее - много)!!!! Надо ещё быстрее. Щас буду эксперементировать с тем, что предложил HandKot ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 12:12:46 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Возможно, быстрей всего получится, если написать небольшую программку на FoxPro, которая со своими Native данными работает очень быстро. Запросами объединять все dbf-ы и экспортировать их в любой формат (хоть dbf, хоть Excel). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 12:33:22 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Это я тоже знаю. Но у меня уже есть программа - на VB. И я просто хочу чтобы она работала ещё быстрее. Может конечно я слишком многого хочу. Но я так понимаю, что многие программеры не довольны своими программами и постоянно пытаются их улучшить, хотя улучшать вроде уже некуда. (а у меня пока ещё есть что улучшить, вот я над этим и бьюсь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 12:41:35 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
VBA не очень подходящая система для скоростных программ. Я подобную задачу решал когда-то сначала на Clipper, потом переписал на ANSI C. Читал из нескольких dbf данные по одному бизнес-объекту, группировал их как надо, суммировал, потом формировал csv файл с итоговыми результатами и загружал в Экселевский шаблон. Получалось примерно по полчаса на два гигабайта dbf-ок. Потом на основе этой отчетной системы сделал конвертор, перегнал все dbf-ки в базу данных и все проблемы исчезли вообще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 18:17:48 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Сергей-1977Это я тоже знаю. Но у меня уже есть программа - на VB. И я просто хочу чтобы она работала ещё быстрее. Поскольку исходный формат - DBF, так и для скоростной работы надо что-то из серии СУБД... Поскольку от исходного формата не отказываешься - то все равно придется обращаться к средствам СУБД, а уж что выберешь (ADO,SQL,Fox,Access)- твое дело. Но тебе правильно посоветовали - напиши небольшую программу сборки-экспорта на Фоксе (или обратись в соответствующий форум), а затем вызывай ее из VB шеллом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 18:24:57 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Урааа!!!! Скорость программы увеличилась примерно процентов на 40 (т.е. на 950MHz вместо 100 сек уходит теперь на обработку примерно 55...60 сек, т.е. почти как раньше на 3200MHz!!!!!!). На 3200MHz ещё не проверял - некогда, да и просто дальше оптимизирую программу. По поводу на чем писать программу. Поясню ещё поподробнее. Приходят файлы сначала в архиве под паролем (пароли разные, но закономерность известна -> это дело, т.е. извлечение файлов из архива можно автоматизировать). В архиве находятся *.xls файлы, причем их там куча, из которых мне нужны не все, а только некоторые. Далее, их (*.xls) на каждый нужный мне район может быть несколько (бывает до 10), поэтому потом я их собираю в один для каждого района (т.е. вместо 30...40 или более полчается штук 6 или чуть более в зависимости от кол-ва районов). Далее разбиваю такие файлы на 2 - дебет и кредит (вот они и появляются, родные!!! *.dbf). И так каждый день. А в конце месяца я формирую 2 итоговых xls-файла (дебет и кредит), в которых каждая страница есть какой-то конкретный район, куда в каждую страницу (то бишь район) и собираются за месяц соответствующие dbf-файлы. Пропустить создание dbf-файлов нельзя, т.к. данные из этих файлов импортируются в другую программу, где далее и обрабатываются. Поэтому и стоит задача - просто ускорить её работу. Теперь задача с обработкой dbf-файлов снята с повестки дня. Теперь я голову ломаю над другой задачей, как-бы ускорить собирание xls-файлов (после извлечения их из архива). У кого есть какие дельные советы, можете подсказать. Мне главное, чтобы мне просто намекнули - в каком направлении двигаться, а дальше я уж все сделаю сам. Так что если есть мысли, то подпните меня в нужном направлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 12:14:07 |
|
||
|
Как НЕ открывая *.dbf скопировать содержимое в Excel
|
|||
|---|---|---|---|
|
#18+
Ускорение кстати произошло за счет SQL-запросов. А вообще-то конечно, раньше, когда файлы присылали сразу в dbf-формате, то и программа соответственно была на FoxPro. Потом, уроды, что присылают нам файлы, изменили его формат на xls, поэтому и мне пришлось под них подстраиваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 12:18:06 |
|
||
|
|

start [/forum/topic.php?fid=61&fpage=303&tid=2183772]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
127ms |
get tp. blocked users: |
3ms |
| others: | 196ms |
| total: | 426ms |

| 0 / 0 |
