четверг, 30 июня 2011 г.

DBFExporter

Задача: Сохранить файл с данными в формате dbf.

Есть разные способы решения данной задачи. Очень часто люди используют пакет MS Office. Excel или Access умеют работать с данным форматом.
Это несколько суровый способ:
1) требует наличия онных на машине у пользователя.
2) COM - со всем вытекающим гемором.

В принципе, в коорпоративной среде пункт 1 не проблема. Пункт 2, если по десять раз в день пользователям не переустанавливают офис - в целом, можно смириться с тупыми глюками, которые похоже и не собираются фиксить, а также необходимостью вызывать методы с 20-ю параметрами, половина из которых ни на что не влияет, и оставлена Майкрософтом для обратной совместимости.

Так как мы в своем приложении используем Excel для определенных целей, идея использовать Excel для экспорта в dbf показалась мне заманчивой, тем более, что он поддерживает все версии формата.

Какого же было мое разочарование, когда выяснилось, что по причинам судовой тягомотины Майкрософт удалила возможность сохранять файлы dbf в MS Excel 2007. Читать он умеет, а вот сохранять фиг. Учитывая, что у доброй половины пользователей именно Excel 2007 - делать под 2003, а потом доказывать, что он должен обязательно быть у пользователя, как то не хочеться.

И тут на помощь приходит гугл. Утилит и библиотек, которые бы могли конвертировать csv в dbf не меряно, но большинство из них стоит примерно по 20$.

Единственное бесплатное и вроде бы работающее решение было найдено на соурсфордже

Экспорт осуществляется в dbf 3. По умолчанию файл сохраняется в кодировке ASCII. Имея исходники, нужно поменять код в двух местах, чтобы экспортировать в любой кодировке.

P.S. Если сгенерированный мной сегодня файл, завтра не получиться загрузить в банковскую АБС - будет не хорошо. Верим в лучшее

3 комментария:

Анонимный комментирует...

Приветствую,Андрей.Нашёл в твоём блоге, что ты использовал библиотеку dbfexporter,где упомянул,что для выгрузки не в ASCII,а в другой кодировке, необходимо поменять код в 2-х местах.Мне нужна кириллица,а выгружаются вопросики:((Подскажи пожалуйста,что для этого надо поменять в коде. (skype: sedan_skype) Буду очень благодарен за помощь

Анонимный комментирует...

Да за день самому написать свой dbfexporter можно, но лень, как известно, двигатель прогресса...

and85 комментирует...

Ну разве что урезанную версию, не делать там всякие Memo и Picture - то может быть, если день будет удачным:)