+7 (916) 114-5109
+7 (916) 114-5109
с 10 до 22 (Москва)
с 10 до 22 (Москва)
Приветствую Вас Гость
Приветствую Вас Гость
Главная » Статьи » Вокруг XlsToDBF
Мануал по работе с XlsToDBF ver1.xx

На самом деле, всё не так сложно. Чтобы надстройка поняла, что от неё требуется и создала ожидаемый DBF-файл, необходимо задать тип, размер, имена полей для конечного DBF-файла, а также его название.

Надстройка распознаёт четыре формата полей dBASE: Character (Cnnn), Numeric (Nnn или Nnn.n), Date (D) и Logical (L), т.е такие поля как General, Memo, Currency и т.д. в конечном файле она создать не сумеет. Собственно, родной конвертер предыдущих версий Excel имел такое же ограничение.

Рассмотрим пример (файл Price.xls из архива, Лист: Price). Предположим, что существует таблица, которую необходимо сохранить в DBF-файле.

Исходная таблица EXCEL для выгрузки в dBASE (DBF)

В конечном DBF-файле мы хотим, чтобы:

  • Поле Идентификатор имело целочисленный тип (т.е Numeric) шириной в 14 знаков и называлось ID.
  • Поле Наименование -- строковый тип (Character) шириной в 100 символов с названием NAME
  • Поле Единица измерения -- строковый, 20 символов, с названием ONE_NAME
  • Поле Цена -- числовой тип (Numeric) шириной в 14 знаков с двумя знаками за запятой с названием PRICE
  • Поле Включать в прайс -- логический тип (Logical) с названием L_PRICE
  • Поле Дата обновления имело тип даты (Date) с названием D_UPDATE

Также мы хотим конечный DBF-файл сохранить с названием PRICE.DBF в кодовой странице (Code Page) DOS-866.

Для того, чтобы получить ожидаемый результат, нужно изменить заголовок таблицы следующим образом (файл Price.xls из архива, Лист: Price_pre).

Таблица EXCEL подготовленная для сохранения в формате DBF (dBASE) с помощью надстройки XlsToDBF

Первая ячейка первой строки, экспортируемой области, содержит имя конечного файла. Расширение в имени файла на процесс конвертации не влияет, т.е. конечный файл в любом случае будет иметь структуру DBF (dBASE).

Вторая ячейка (B1) указывает макросу надстройки в какой кодовой странице сохранять DBF-файл. Если значение ячейки (B1) отличается от CP866 или не задано совсем, то конечный DBF-файл сохранится в кодовой странице WINDOWS CP1251.

Вторая строка описывает форматы полей, которые мы хотим получить в конечном файле. Здесь хочу отметить, т.к. многие путаются, что числовой формат с дробной десятичной частью, например N14.2 трактуется следующим образом: ширина поля 14 знаков, включая десятичную точку и 2 знака за ней. Т.е. 11 целых знаков, десятичная точка и 2 знака за ней, а не 14 целых знаков и 2 за точкой.

Для наглядности пример. Так хранится в DBF-файле число 630.75 в поле с форматом N14.2:

Пример: хранение данных в поле таблицы DBF (dBASE)

Третья строка описывает наименование полей (максимально 10 символов). Я думаю, больше комментировать здесь нечего.

Начиная с четвёртой строки и до конца непрерывной области, располагаются данные. Желательно, чтобы данные соответствовали заданному типу. Красным цветом я отметил те поля, в которых значения не могут быть корректно преобразованы. В таких случаях надстройка задаёт им значения по умолчанию. Например, значение ДА не может быть преобразовано к логическому типу. Поэтому в конечном DBF-файле это поле будет иметь значение FALSE (F). В данном примере то же самое произойдёт и с датами, помеченными красным цветом (в DBF-файле они будут пустые).

Запуск макроса надстройки

После того, как мы подготовили данные для выгрузки, можно запустить макрос надстройки. Для этого нужно выделить любую ячейку в области данных или заголовка и нажать <Alt+F8>. В диалоговом окне «Макрос» в поле «Имя макроса:» нужно ввести XlsToDBF (регистр не имеет значения) и нажать кнопку <Выполнить>. Если на предыдущем этапе всё сделано верно, то DBF-файл будет сохранён с именем PRICE.DBF в той же папке, где расположена исходная книга Excel. В случае если книга новая и не сохранена, то DBF-файл будет сохранён в папке по умолчанию (скорее всего в папке «Мои документы»). Будьте внимательны: при повторном запуске макроса DBF-файл будет переписан без каких-либо предупреждений.

Вот так выглядит созданный файл PRICE.DBF, открытый в среде FoxPro 2.6:

Результат работы XlsToDBF, полученный DBF-файл открыт в среде FoxPro

В открытом диалоге «Setup» видно, что все поля отформатированы так, как мы и ожидали.

Если работа надстройки устраивает, и Вы предполагаете часто её использовать, то для удобства создайте пользовательскую кнопку на ленте и назначьте ей макрос XlsToDBF.

В заключение

Для тех, кто интересуется программированием на VBA. Код макроса открыт и достаточно прост, можете посмотреть. Исходя из табличных данных, макрос создаёт файл DBF-формата. Для большего понимания, что происходит в программе, необходимо разобраться со структурой DBF-файлов. Посмотреть описание структуры DBF-файла можно здесь.

Будут идеи или вопросы, пишите здесь в комментариях!

Для личного общения заходите на страницу «Контакты». Буду рад вашим отзывам, замечаниям, предложениям!

Автор: Василий Малинин | Добавил: basile-m | Просмотров: 7525 | Всего комментариев: 4

Добавлять комментарии могут только зарегистрированные пользователи с подтверждённым E-Mail адресом.
  [Материал]
В строке 43 модуля DBFField у меня возникла ошибка связанная с тем, что моя строка длиной 300, а тип byte только до 256 разрешает. Придется переделать на integer.
upd: переделать на Int оказывается нельзя, т.к. только в стандарте dBase7 появилась возможность задавать длины поля > 256, а макрос рассчитан на более старый стандарт.


  [Материал]
Макрос поддерживает стандарт dBASE, который поддерживал MS EXCEL 2003. Ничего нового (в плане типов данных) я не вносил. Готовится новая версия, которая будет поддерживать практически все форматы Visual FoxPro 9. Версия будет коммерческая с графическим интерфейсом. О сроках выхода проинформирую всех подписчиков заблаговременно.


  [Материал]
о господи, я дочитал инструкцию. Оказывается так и должно быть: надо вводить имя макроса вручную)) Вопрос снимается


  [Материал]
Какая-то странная ситуация с установкой. Установил xla по инструкции, макрос в модуле появился, но список по Alt+F8 пустой. Если нем вручную набрать XlsToDbf и нажать Выполнить, то макрос начинает выполняться. Не знаете, почему так?
Офис 2016 Pro х64 (скриншот https://yadi.sk/i/o9S7Xa6QPSl_Ww)


Онлайн всего: 1
Гостей: 1
Пользователей: 0

Мастерская Василия Малинина

Copyright Basile's Soft © 2024

Конструктор сайтов - uCoz

basile-m@yandex.ru