Экспорт и импорт данных

В современном делопроизводстве широчайшее распространение получили такие офисные приложения, как Word и Excel. Наш приятель Лис также шагает в ногу со временем и умеет передавать данные из своих таблиц в другие приложения, а также принимать данные из некоторых приложений.

Лис и Excel

Самый простой способ передать данные из Visual FoxPro в Excel — воспользоваться командой Export (Экспорт) из системного меню File (Файл).

После выполнения данной команды мы увидим диалоговое окно Export (Экспорт).

В раскрывающемся списке Туре (Тип данных) следует указать, в какой тип файлов будет осуществляться передача данных.

В поле ввода То (Куда) необходимо указать местоположение и имя файла, который будет “принимать” данные. Здесь можно как просто вписать имя будущего файла, так и воспользоваться расположенной справа кнопкой, которая открывает диалоговое окно Save As (Сохранить как).

Далее, в поле ввода From (Откуда) необходимо указать имя таблицы, из которой будут переданы данные.
Все, да не все… По умолчанию в файл-приемник будут переданы все записи и все поля указанной таблицы. Иногда такое “изобилие” просто ни к чему, и для задания условий передачи мы воспользуемся кнопкой Options (Опции).

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

Параметры окна Scope

  • АН (Все) – Все записи таблицы
  • Next (Следующие) – Следующие после текущей. Число указывается в поле ввода
  • Record (Запись) – Запись номер…
  • Rest (Оставшиеся) – Все записи после текущей

При нажатии кнопок For (Для) и While (Пока) появится уже хорошо знаков мое нам окно Expression Builder (Построитель выражений), в котором можно задать необходимые условия.

Кнопка Fields (Поля) позволяет выбрать те поля исходной таблицы, которые будут переданы.

В окне Field Picker находится два списка. В левом отображены все поля исходной таблицы, в правом — те, которые будут передаваться в файл-приемник. Для переноса полей в правый список используется кнопка Move (Перенести). Наконец, когда все “формальности” улажены, можно нажать кнопку ОК и посмотреть, что там у нас из всего этого получилось.

Да, все хорошо, но опять возникает проблема с нашим пользователем… Ему-то, бедняге, как это все проделать? А для него мы создадим поле ввода и кнопочку — пусть себе спокойно работает!
1. Создаем новую форму с источником данных names.dbf.
2. Пишем код для события click кнопки Экспорт.

1
2
3
4
5
6
7
8
IF EMPTY(Thisform.Text1.Value)
=MESSAGEBOX
("УКАЖИТЕ ИМЯ ФАЙЛА","ОШИБКА")
ELSE
SELE Names
My_File=ALLTR(Thisform.Textl.Value)
EXPORT TO &My_File TYPE XLS
ENDIF

Вот и все. Чем хорош данный способ? В отличие от предыдущего, здесь помимо таблиц можно использовать и представления данных. Да и вообще удобнее для пользователя. Ты скажешь, а как же ограничить число передаваемых полей и записей? Да элементарно — добавь в форму еще несколько элементов управления (например, раскрывающийся список с наименованиями полей, поле ввода для установки фильтра и т.д.), используй макроподстановки и все получится! Это, как говорится, дело техники…

Но при данном способе передачи мы просто получаем книгу Excel и все. А если нам нужен “красивый” отчет?

Чтобы получить такую “красоту”, нам необходимо воспользоваться для передачи данных механизмом OLE.

Код для кнопки Экспорт будет следующим

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Omyexcelreport=CREATEOBJECT("EXCEL.SHEET";
Qmyexcelreport.Application.Visible=.T.
Omyexcelreport=Omyexcelreport.Sheets[1]
SELE Names
WITH Omyexcelreport
WITH .Range("Al")
.Value="СПИСОК КЛИЕНТОВ"
WITH .Font
.Bold-.т.
.Size=14
ENDWITH
ENDWITH
ENDWITH
Nrow=5
SCAN
Nrow=Nrow+l
Qmyexcelreport.Cells(Nrow,1).Value=ALLTR(Names.Cfirstname)+;"
"+ALLTR(Names.Csecondname);+"
"+ALLTR(Clastname)
WITH Omyexcelreport
WITH .Cells(Nrow,1)
WITH .Font
IF Names.Csex="M"
.Bold-.T.
.Colorindex=4
ELSE
.Bold=.F.
.Colorindex=5
ENDIF
ENDWITH
ENDWITH
ENDWITH
ENDSCAN
Qmyexcelreport.Visible=.T.
RELEASE Omyexcelreport

Таким образом, Visual FoxPro предоставляет нам широкий выбор возможностей передачи данных из своих таблиц в электронные таблицы Excel. Более того, мы можем решать и обратную задачу — принимать в таблицы Visual FoxPro данные из других приложений. Рассмотрим это на примере Excel.

Допустим, имеется электронная таблица, данные из которой необходимо перенести в таблицу Лиса. (А у нас она есть, это таблица my_excei, которую мы создали на предыдущем занятии.) Для решения данной задачи воспользуемся пунктом Import (Импорт) системного меню File (Файл). После выбора данной команды мы увидим диалоговое окно Import (Импорт).

В раскрывающемся списке Туре (Тип файла) указываем, из файла какого! типа мы будем импортировать данные, а в поле ввода From (Откуда) задаем имя файла. Поле ввода То (Куда) доступно только для чтения и по умолчанию там указан путь к каталогу Visual FoxPro. При работе с данным окном удобнее воспользоваться услугами мастера (Import Wizard), что мы и сделаем.

На данном этапе мастер просит указать тип импортируемых данных в списке File Type (Тип файла), источник данных Source File, а также файл, в который будет произведен импорт данных (Destination File). Причем этот самый Destination File можно как выбрать, включив опцию Existing table (Существующая таблица), так и создать новый — опция New table (Новая таблица). В данном случае будет открыто диалоговое окно Save As (Сохранить как), в котором нужно задать имя создаваемого файла.

На следующем этапе мастер просит указать, будет ли наша таблица включена в состав базы данных (опция Add my table to the following database), или это будет свободная таблица (Create my table as a stand-alone free table).

На втором шаге мы можем указать, с какой строки начать импорт данных (Begin import at row) и на какой строке расположить наименования полей (Field names in row). А зачем нам в таблице их наименования? Ставим ноль. В списке Worksheet можно указать конкретный лист электронной таблицы, в нашем случае он один-единственный. Также можно задать формат данных (опция Data Format).

На третьем шаге работы мастера мы можем задать типы полей нашей таблицы и определить заголовки, которые будут отображены при Просмотре таблицы.

Далее можно определить дополнительные параметры:
• Code Page — это кодовая страница (Для Windows — 1251);
• Currency Symbol — “денежный” символ, будет отображаться с полями типа Currency;
• 1000 Separator — разделитель тысяч;
• Decimal Separator — разделитель между целой и дробной частью чисел;
• Date Format — формат отображения дат.
И наконец, долгожданный финиш.

После нажатия кнопки Finish (Готово) произойдет импорт данных, в чем мы можем легко убедиться, открыв для просмотра нашу таблицу.

А что это мы все про Excel? Кроме Excel существует множество других приложений, с которыми Лис может обмениваться данными. Вот, например, его младший братец FoxPro for DOS наотрез отказывается воспринимать таблицы, созданные в Visual FoxPro! Ну, вроде все нормально, обычная таблица, dbf, все как положено — ан нет! “Ругается”, пишет что это “Not a database file”. Вот тут-то и приходят на помощь экспортно-импортные oпeрации. (Хотя в данном конкретном случае экспорт и не нужен — “визуальный” Лис вполне адекватно воспринимает таблицы, созданные “Досовским” Лисом.) Более того, чтобы передать таблицу в формат DOS, достаточно такой команды:

1
COPY My_Table TO My_Dos_Table TYPE FOXPLUS AS 886

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100