С выходом версии MS Office 2007 в программе Excel по кнопке <Save As...> (<Сохранить как...>) в списке возможных вариантов я не обнаружил формат dBASE (*.DBF), чем был крайне разочарован (и, как оказалось впоследствии, не я один). Возможно, в Microsoft посчитали, что dBASE это вчерашний день... Однако в России этот формат до сих пор весьма популярен и востребован.
Для всех столкнувшихся с этой проблемой и (в первую очередь) для себя, я написал небольшую надстройку, которая позволяет сохранить табличные данные в файле формата dBASE (DBF).
Чтобы воспользоваться сервисом надстройки, табличные данные для выгрузки необходимо подготовить некоторым образом. Когда Вы пользовались более ранними версиями MS Excel (2003, XP...), проблем с сохранением данных в DBF-файл не было: стоило нажать <Сохранить как...>, выбрать <dBASE (*.DBF)> и таблица активного листа сохранялась в формате DBF. Всё просто и удобно. Лично мне это "удобство" не по вкусу. Меня не устраивает хотя бы то, что Excel за меня решает как форматировать поля в конечном DBF-файле. Например, если в таблице имеется колонка с числовым типом данных и все значения в ней целочисленные, то Excel в итоге в DBF-файле применяет формат Numeric целочисленный, например, шириной 5 символов, а мне нужно шириной 16 с двумя знаками за запятой. Что делать? Открываю файл в FoxPro, далее SETUP, MODIFY, устанавливаю вместо N5 -- N16.2. Или текстовые поля... Почему-то Excel решил сделать ширину поля 38 символов (причём, я так и не смог понять, каким образом он высчитывает эту ширину), а хотелось бы 100. Опять же открываю FoxPro, MODIFY и т.д.
В общем, решая проблему экспорта в DBF-формат, я заодно решил проблему с определением полей в конечном DBF-файле. Поэтому надстройка XlsToDBF.xla требует от пользователя
- определения названия, типа и размера полей для каждой колонки
- определения имени конечного файла
Определение имени конечного DBF-файла на мой взгляд тоже весьма удобно, т.к. предыдущие версии Excel сохраняли DBF-файл под именем рабочей книги, а это не всегда нужно (например, вы из одной книги экспортируете несколько разных таблиц).
DOS-866
Судя по количеству писем, пришедших на мой e-mail, думаю, я многих порадую тем, что теперь макрос надстройки умеет сохранять конечный DBF-файл в кодовой странице DOS-866.
Ещё раз об Excel и dBASE. Странная вещь. В заголовке файла dBASE есть один байт, который указывает в какой кодовой странице в нём сохранены данные. Приложения, работающие с форматом dBASE, открывают файлы в той кодировке, на которую указывает этот байт из заголовка. Что же касается Excel, то, хоть он и может прочитать данные из DBF-файла, однако этот байт игнорирует и всегда отображает данные в кодировке DOS-866.
Изначально моя надстройка сохраняла данные только в кодовой странице WINDOWS-1251. В связи с этим DBF-файл полученный с помощью XlsToDBF и открытый в Excel отображался некорректно. Хотя если просматривать его, например, в среде FoxPro, всё выглядит идеально. Я не придавал этому большого значения, т.к. сам обрабатывал DBF-файл в FoxPro. Более того, в FoxPro я связывал таблицы с разными кодировками и никаких проблем с кириллицей не испытывал.
Тем не менее, для тех кому это важно, возможность сохранения DBF-файла в DOS-866 теперь имеется.