Basile s soft - експорт таблиць excel в формат dbf
Перше, що необхідно зробити, це завантажити і встановити останню версію XlsToDBF на свій комп'ютер.
Підготовка табличних даних
Насправді, все не так складно. Щоб надбудова зрозуміла, що від неї вимагається і створила очікуваний DBF-файл, необхідно задати тип, розмір, імена полів для кінцевого DBF-файлу, а також його назву.
Надбудова розпізнає чотири формату полів dBASE: Character (C nnn), Numeric (N nn або N nn.n), Date (D) і Logical (L), тобто такі поля як General, Memo, Currency і т.д. в кінцевому файлі вона створити не зможе. Власне, рідний конвертер попередніх версій Excel мав таке ж обмеження.
Розглянемо приклад (файл Price.xls з архіву, Лист: Price). Припустимо, що існує таблиця, яку необхідно зберегти в DBF-файлі.

В кінцевому DBF-файлі ми хочемо, щоб:
- Поле Ідентифікатор мало цілочисельний тип (тобто N umeric) шириною в 14 знаків і називалося ID.
- Поле Найменування - строковий тип (C haracter) шириною в 100 символів з назвою NAME
- Поле Одиниця виміру - строковий, 20 символів, з назвою ONE_NAME
- Поле Ціна - числовий тип (N umeric) шириною в 14 знаків з двома знаками за коми з назвою PRICE
- Поле Включати в прайс - логічний тип (L ogical) з назвою L_PRICE
- Поле Дата поновлення мало тип дати (D ate) з назвою D_UPDATE
Також ми хочемо кінцевий DBF-файл зберегти з назвою PRICE.DBF в кодової сторінці (Code Page) DOS-866.
Для того, щоб отримати очікуваний результат, потрібно змінити заголовок таблиці наступним чином (файл Price.xls з архіву, Лист: Price_pre).

Перша осередок першого рядка, що експортується області, містить ім'я кінцевого файлу. Розширення в імені файлу на процес конвертації не впливає, тобто кінцевий файл в будь-якому випадку буде мати структуру DBF (dBASE).
Друга осередок (B1) вказує макросу надбудови в якій кодової сторінці зберігати DBF-файл. Якщо значення комірки (B1) відрізняється від CP866 або не задано зовсім, то кінцевий DBF-файл збережеться в кодової сторінці WINDOWS CP1251.
Другий рядок описує формати полів, які ми хочемо отримати в кінцевому файлі. Тут хочу відзначити, тому що багато плутаються, що числовий формат з дробової десяткової частиною, наприклад N14.2 трактується наступним чином: ширина поля 14 знаків, включаючи десяткову точку і 2 знака за нею. Тобто 11 цілих знаків, десяткова точка і 2 знака за нею, а не 14 цілих знаків і 2 за точкою.
Для наочності приклад. Так зберігається в DBF-файлі число 630.75 в поле з форматом N14.2:
Починаючи з четвертої рядки і до кінця безперервної області, розташовуються дані. Бажано, щоб дані відповідали заданому типу. Червоним кольором я зазначив ті поля, в яких значення не можуть бути коректно перетворені. У таких випадках надбудова задає їм значення за замовчуванням. Наприклад, значення ТАК не може бути перетворено до логічного типу. Тому в кінцевому DBF-файлі це поле буде мати значення FALSE (F). В даному прикладі те ж саме відбудеться і з датами, позначеними червоним кольором (в DBF-файлі вони будуть порожні).
Запуск макросу надбудови
Після того, як ми підготували дані для вивантаження, можна запустити макрос надбудови. Для цього потрібно виділити будь-яку клітинку в області даних або заголовка і натиснути
Ось так виглядає створений файл PRICE.DBF. відкритий в середовищі FoxPro 2.6:

У відкритому діалозі «Setup» видно, що всі поля відформатовані так, як ми і очікували.
Якщо робота надбудови влаштовує, і Ви припускаєте часто її використовувати, то для зручності створіть призначену для користувача кнопку на стрічці і призначте їй макрос XlsToDBF.
Для тих, хто цікавиться програмуванням на VBA. Код макросу відкритий і досить простий, можете подивитися. Виходячи з табличних даних, макрос створює файл DBF-формату. Для більшого розуміння, що відбувається в програмі, необхідно розібратися зі структурою DBF-файлів. Переглянути опис структури DBF-файлу можна тут.
Будуть ідеї або питання, пишіть мені на пошту [email protected] (в темі листа вкажіть SITE) або в Гостьової книги. Буду радий вашим відгуками, зауваженнями, пропозиціями!
Підтримай проект XlsToDBF!
Це можна зробити через гаманець Yandex, а також через картки VISA та MasterCard