xls to dbf

Бесплатный конвертер XLS в DBF и DBF в XLS 

Конвертер XLS а также XLSX в DBF и DBF в XLSX представляет собой макрос EXCEL, которым можно использовать не только для конвертирования, но и для поиска, заполнения из файла другой структуры по ключевым полям записей и их модификация. Например, если требуется заполнить файл EXCEL, в котором присутствует какое либо ключевое поле (номер счета или код товара) из базы DBF с таким же ключевым полем.


Или же обратная ситуация - есть EXCEL файл, надо модифицировать или заполнить DBF файл. Конечно потребуется коррекция VBA кода макроса, но сочинять и отлаживать "с нуля" не придется. 

Идея выложить подобный макрос появилась, когда самому потребовался подобный конвертор, а поиски в интернете указывали только на платные конвертеры, к тому же без возможности что либо изменить под себя. За основу была взята оригинальная надстройка XlsToDBF, автор Василий Малинин, которая распространялась в интернете бесплатно, но найти и скачать ее оказалось не просто. Больше попадались либо платные утилиты, либо он-лайн конверторы. Ни то ни другое не подходило. 

Тем более с выходом версии MS Office 2007 в программе Excel по кнопке <Save As...> (<Сохранить как...>) в списке возможных вариантов формат dBASE (*.DBF) уже нет. В последующих  подавно.

Краткое описание файла конвертора с макросом XLSX_DBF 

В скачанном архиве XLSX_DBF.zip (в конце статьи) присутствуют файлы: 

 Конвертор.xlsm - собственно сам EXCEL файл с макросами.

 

xls to dbf 1

 

Файлы для примера конвертации и заполнения

in_file.DBF

LK_in1.xlsx

RK_in2.xlsx

out1.xlsx

out2.xlsx

Еще два файла появятся после нажатия кнопки " Заполнить L,R DBF"

SUB_K.DBF

SUB_L.DBF

Все действия по кнопкам легко подкорректировать в VBA из меню макросов

По умолчанию в файле прописаны пути "D:\File". Для удобства разархивируйте архив на диск D в корень и у Вас сохранится начальная настройка каталогов.

xls to dbf 2

 

Естественно какие то начальные знания VBA должны присутствовать. Подробных инструкций нет, но все и так максимально просто.  Если Вы хоть раз работали с макросами, то подправить по себя наверняка сумеете.

 

xls to dbf 3

 

Для  выполнения макроса необходимо в EXCEL включить разрешение на открытие и запуск макросов. В этих макросах ВИРУСОВ НЕТ. Для включения надо в меню "ФАЙЛ" выбрать "Сведения" -> "Параметры"

 

xls to dbf 5

 

Далее выбрать "Центр управления безопасностью" -> "Параметры центра управления безопасностью" -> "Параметры макросов" -> "Включить все макросы"

 

xls to dbf 4

Для запуска конвертора открываутся файл Конвертор.xlsm. Слева кнопки выбора файлов, справа кнопки запуска. Для примера представлены  файлы EXCEL (Субсидии и льготы - Out1 и Out2), которые обновляются из IN_FILE.DBF, по ключевому полю LSCHET.  В сроки файлов XLSX, где будет найден "Номер лицевого счета" будет заполнено значением из поля "DOLG"  файла IN_FILE.DBF.

Вторая часть Конвертор.xlsm демонстрирует создание и заполнение файлов SUB_K.DBF и SUB_L.DBF из  LK_in1.xlsx и  RK_in2.xlsx согласно заданной структуры. За основу создания взята надстройка XlsToDBF, преобразованная в макрос с исправлением некоторых ошибок.

Макрос (надстройка) XlsToDBF и его описание 

Позволяет:  

    • задать произвольное имя выходного DBF-файла
    • задать тип и размер для каждого поля по усмотрению пользователя
    • задать кодовую страницу (WINDOWS-1251 или DOS-866) для выходного DBF-файла
    • задать параметр MAC для корректного вывода DBF-файла на Macintosh

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

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

Для примера используется файл Price.xls из архива, Лист: Price. Существует таблица EXCEL, которую необходимо сохранить в DBF-файле.

xls to dbf 6

В конечном 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).

xls to dbf 7

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

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

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

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

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

В макросе файла Конвертор.xlsm эти операции прописаны в VBA коде, макрос -  "Вывод_в_dbf()"

Sub Вывод_в_dbf()
Dim i As Integer
Dim strMes As String
Dim strMes1 As String
Dim strMes2 As String
Dim WBook As String
Dim WMak As String
Dim Wind1 As String
strMes = ""
Range("D13:D200").Value = ""
Range("D13").Value = "Обработка 1"
f_lgot = Range("D8").Value
f_sub = Range("D9").Value
f_dbf_l = Range("D10").Value
f_dbf_r = Range("D11").Value

WBook = ThisWorkbook.Name
strMes2 = Range("D10").Value
If is_file(f_lgot) = 1 Then
Range("D13").Value = "Обработка 1"
Workbooks.Open (f_lgot)
Range("A1").Value = strMes2
i = rep_file()
Application.Run "'Конвертор.xlsm'!XlsToDBF"
ActiveWindow.Close SaveChanges:=False
Windows(WBook).Activate

strMes = strMes + "DBF Файл льгот " & Range("D10").Value & " заполнен" & Chr(13) + Chr(10)
Else
strMes = strMes + "!!! DBF Файл льгот НЕ заполнен!" & Chr(13) + Chr(10)
End If

 

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

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

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

 Скачать XLSX_DBF бесплатно   Скачать (Download)

Скачать XlsToDBF бесплатно    Скачать (Download)