Выбор читателей
Популярные статьи
Несмотря на то, что dbf давно считается legacyформатом, сабж до сего времени остается насущной задачей судя по количеству вопросов в Интернете. В частности, я с ней столкнулся при попытке затянуть в таблицу карту. Карта ArcGIS содержала метаданные в формате dbf. Имело смысл прочитать их заодно в SQLServer, чтобы не делать вручную подписи к полигонам, линиям и иным картографическим объектам. В давние времена VisualFoxPro 6 и SQLServer 7.0 это не составляло проблемы , но с тех пор многое изменилось. С выходом SQLServer 2005 в MSDNпоявилась информация, что мастер импорта и экспорта в SQL Server не поддерживает импорт и экспорт dBASE-файлов и других DBF-файлов. В качестве решения рекомендовано использовать SQL Server Integration Services или промежуточный импорт в Access или Excel . Такая же ситуация формально сохраняется по сей день, включая SQLServer 2012 . Это не всегда удобно, потому что, помимо SQLServer, требует дополнительной установки MSOffice, а средства разработки ETL-пакетов не входят в состав бесплатной редакции SQLServerExpress. В этой заметке я постараюсь импортировать dbf в SQLServer, не пользуясь ничем, кроме SQLServer .
Имеется файл regions2010_wgs.dbf, взятый отсюда . Открываем SQLServerManagementStudio, в ObjectExplorerвыбираем базу, в таблицу которой будем импортировать dbf, и из контекстного меню говорим ImportData :
Рис.1
В качестве источника данных указываем. NetFrameworkDataProviderforODBC, коль скоро ODBC теперь снова наше все , в качестве ConnectionString - следующую строку соединения:
Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=NA;Exclusive=No; NULL=No;Deleted=No;BackgroundFetch=No
Рис.2
Нажимаем Next. Если теперь нажать Back , мы увидим, что свойства соединения развернулись из строки в столбец так, чтобы можно было лицезреть их список и видеть, чему каждое из них равно:
Рис.3
Примеры строки соединения для ODBC-драйвера dBaseприводятся, например, в MicrosoftKnowledgeBase или на ресурсе connectionstrings.com . В целом, о назначении тех или свойств легко догадаться из их названий, кроме, пожалуй, свойства Deleted, которое имеет прямо противоположный смысл . Как известно, операция удаления строки в dBase/ FoxProне приводит к ее немедленному физическому удалению из файла. Строка лишь помечается, что она удалена. Физическая очистка строк, у которых проставлен признак удаления, и реорганизация файла выполняются командой PACK. Значение NO говорит драйверу включить удаленные строки в возвращаемый набор результатов. Чтобы, наоборот, их не показывать, надо поставить YES. Жмем Next .
На следующем экране все просто. Задается соединение с SQLServer, включая ту базу, в которой будет создана таблица с результатами импорта из dbf :
Рис.4
Идем дальше. Предлагается выбрать dbf-ную таблицу из списка таблиц или написать руками запрос. Имеет смысл, например, для FoxProшной базы, которая, как и всякая нормальная база, представляет собой контейнер, в котором содержится несколько таблиц, в данном случае в виде отдельных dbf -файлов . Для индивидуального dbf-файла это не работает - см., например, OdbcConnection. GetSchema(" tables") allwrongfor . dbffile , и сотрудники поддержки Microsoftрекомендовали в этой ситуации использовать OLEDBProviderforVisualFoxPro. Во-первых, случай имел место задолго до коренного перелома генеральной линии партии. OLEDB тогда было наше все, aODBC, наоборот, относилось к старым унаследованным интерфейсам. Во-вторых, я не понимаю, зачем броузить список dbf , когда он и так один.
В случае разрозненных dbf, лежащих в одной директории, надо задать в строке ODBC -соединения (Рис.3) свойство DefaultDir, например,
Driver={Microsoft dBase Driver (*.dbf)};sourcetype=DBF;DefaultDir=c:\Temp;exclusive=No;null=No;deleted=No;backgroundfetch=No
Тогда можно отметить Copy Data from one or more tables or views.
Рис.5
и будет выведен список dbf в этой директории, из которого будет предложено выбрать:
Рис.6
Но я не задавал DefaultDir на Рис.3, поэтому выбираю написать запрос:
Рис.7
и пишу:
Рис.8
а в ответ получаю ошибку The Microsoft Jet database engine could not find the object "regions2010_wgs.dbf":
Рис.9
Эта ошибка происходит из-за того, что глупый драйвер до сих пор воспринимает имена файлов в формате MS-DOS 8.3 . Если переименовать файл regions2010_wgs.dbf в, скажем, aaa. dbf, а запрос Рис.8, соответственно, заменить на select * from c:\Temp\aaa.dbf , ошибка пропадает. Будет предложено выбрать существующую или задать название таблицы, которая будет создана на SQLServer в базе Database1 (см.Рис.4) под результаты импорта из dbf . Oставляю предлагаемое название как есть:
Рис.10
Нажав здесь же кнопку Preview, можно предварительно ознакомиться с содержимым dbf, котор oе предполагается перенести на SQLServer :
Рис.11
Все хорошо, только удручает абракадабра вместо русского текста. Причину ее появления в популярной форме объясняет уважаемый автор Lalex . Русские символы слетают из-за того, что глупый драйвер ожидает dbfный файл в DOSовской кодировке (CP866, она же OEM). Он, похоже, считает формат dbf очень древним, чисто досовским наследием. ArcView же по умолчанию считает DBF виндосовским форматом (ANSI 1251). Так и стоят эти две программы, как два бычка, упершись лбами .
Итак, причина ясна, осталось ее поправить. Пляски с бубном прописать в строку соединения collate=Machine или Russian / CodePage=ANSI / Collating Sequence=1251 к успеху не привели. Изменил 29-й байт в aaa. dbfна 0хС9 - ноль эмоций. Действительно, признак кодовой страницы в заголовке dbfдрайвером игнорируется. Однако настройку драйвера можно изменить в реестре. Она хранится в DataCodePage по пути HKLM\ SOFTWARE\ Microsoft\ Jet\4.0\ Engines\ xBase или HKLM\ SOFTWARE\ Microsoft\ Office\14.0\ AccessConnectivityEngine\ Engines\ Xbaseили, соответственно, HKLM\ SOFTWARE\ Wow6432 Node\ Microsoft\ Jet\4.0\ Engines\ xBase или HKLM\ SOFTWARE\ Wow6432 Node\ Microsoft\ Office\14.0\ AccessConnectivityEngine\ Engines\ Xbase в зависимости от того, был ли установлен на машину Officeи если да, то как. По умолчанию, свойство действительно имеет значение OEM, что заставляет драйвер читать все dbfы из расчета этой кодировки. Если изменить его на ANSI
Рис.12
кириллица в ANSIшном dbf" e , естественно, будет читаться по-человечески:
Рис.13
Перезапускаться при этом, к счастью, не требуется, однако визард импорта следует закрыть и повторить по-новой с Рис.1.
Жмем ОК, Next, заканчиваем визард, в результате чего неявно создается и выполняется SSIS -пакет:
Рис.14
и получаем фигню. Гы!
Рис.15
Это, на самом деле, тоже понятно, почему. В таблице Queryпод результаты импорта визард создал поле region типа varchar(200) без явного указания коллации. Следовательно, для него по умолчанию используется коллация базы. Так получилось, что база Database 1 имела нерусскую коллацию:
Рис.16
Чтобы исправить ситуацию, надо сделать поле region юникодовским или откорректировать ему коллацию. Кстати, давайте ему еще длину увеличим. Так, на всякий случай.
Рис.17
Сохраняем изменения структуры, очищаем данные truncate table Query и повторяем импорт Рис.1-14
Рис.18
Теперь все импортируется нормально. Единственно, я сказал "очищаем данные", но у себя это сделать забыл, и на картинке они задвоились. Переделывать уже не буду, потому что непринципиально. Смысл понятен.
Алексей Шуленин
В этой статье я расскажу как загрузить много огромных dbf файлов, состоящих из миллионов записей в вашу базу данных на ms sql сервере за приемлемое время.
Задача на первый взгляд тривиальна. Можно использовать мастер в sql management studio или функцию OPENROWSET через запрос.
Но первый вариант после нескольких попыток отпал из за разных глюков и необходимости загрузки множества файлов в одну таблицу (около 100 файлов). К тому же при продолжительной загрузке вылетала ошибка.
Второй вариант тоже не подошел из за различной разрядности драйверов и разрядности сервера.
Так как файл просто огромный, то было решено читать его через поток и записывать в базу. Далее после прочтения строки в файле надо эту строку записать в табличку. Первое что пришло на ум это использовать insert, но запись в этом случае заняла бы слишком много время.
И тут я вспомнил про другой механизм записи через SqlBulkCopy, который позволяет заливать огромное число записей без запросов insert.
На деле это использование класса SqlBulkCopy, для осуществления записи через который надо реализовать один лишь интерфейс IDataReader.
Итак начнем с реализации интерфейса public class BDFBulkReader: IDataReader
Начнем с функции, которая возвращает значение текущей записи:
public object GetValue(int i) { return R]; }
Обращу ваше внимание на то что поля в файле и поля в таблице могут быть в разном порядке. А по индексу хотелось бы получать значение для соответствующего поля таблицы. Поэтому я использовал дополнительно словарь FieldIndex, где сопоставление имен полей номеру в таблице sql. По номеру берется имя поля, по имени из словаря R берется значение из прочитанной строки dbf файла. В итоге для n го индекса в бд GetValue вернет соответствующее значение.
Dictionary
FieldIndex будем передавать уже заполненный для таблицы, а R будет заполнять при вызове самими reader"ом функции Read, которую в дальнейшем тоже реализуем.
Итак, конструктор:
System.IO.FileStream FS;
byte buffer;
int _FieldCount;
int FieldsLength;
System.Globalization.DateTimeFormatInfo dfi = new System.Globalization.CultureInfo("en-US", false).DateTimeFormat;
System.Globalization.NumberFormatInfo nfi = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
string FieldName;
string FieldType;
byte FieldSize;
byte FieldDigs;
int RowsCount;
int ReadedRow = 0;
Dictionary
Его задачи это открыть файл, определить имена полей, их число и их типы. Второй параметр конструктора, как я писал выше, это словарь соответствий, чтобы, например, по первому номеру поля мы гарантированно получили нужное поле из файла.
Теперь перейдем к реализации bool Read(). Она вернет true в случае если строка успешно прочитана. И false в случае если строка не была прочитана и в то же время был достигнут конец данных.
Public bool Read() { if (ReadedRow >= RowsCount) return false; R.Clear(); buffer = new byte; FS.ReadByte(); FS.Read(buffer, 0, buffer.Length); int Index = 0; for (int i = 0; i < FieldCount; i++) { string l = System.Text.Encoding.GetEncoding(866).GetString(buffer, Index, FieldSize[i]).TrimEnd(new char { (char)0x00 }).TrimEnd(new char { (char)0x20 }); Index = Index + FieldSize[i]; object Tr; if (l.Trim() != "") { switch (FieldType[i]) { case "L": Tr = l == "T" ? true: false; break; case "D": Tr = DateTime.ParseExact(l, "yyyyMMdd", dfi); break; case "N": { if (FieldDigs[i] == 0) Tr = int.Parse(l, nfi); else Tr = decimal.Parse(l, nfi); break; } case "F": Tr = double.Parse(l, nfi); break; default: Tr = l; break; } } else { Tr = DBNull.Value; } R.Add(FieldName[i], Tr); } ReadedRow++; return true; }
Еще раз напомню, что после ее вызова прочитанная строка запишется в словарь R, для последующего чтения reader"ом.
Итак, осталось реализовать, метод возвращающий число полей:
Public int FieldCount { get { return _FieldCount; } }
И заглушки для интерфейса:
Public void Dispose() { FS.Close(); } public int Depth { get { return -1; } } public bool IsClosed { get { return false; } } public Object this { get { return new object(); } } public Object this { get { return new object(); } } public int RecordsAffected { get { return -1; } } public void Close() { } public bool NextResult() { return true; } public bool IsDBNull(int i) { return false; } public string GetString(int i) { return ""; } public DataTable GetSchemaTable() { return null; } public int GetOrdinal(string name) { return -1; } public string GetName(int i) { return ""; } public long GetInt64(int i) { return -1; } public int GetInt32(int i) { return -1; } public short GetInt16(int i) { return -1; } public Guid GetGuid(int i) { return new Guid(); } public float GetFloat(int i) { return -1; } public Type GetFieldType(int i) { return typeof(string); } public double GetDouble(int i) { return -1; } public decimal GetDecimal(int i) { return -1; } public DateTime GetDateTime(int i) { return new DateTime(); } public string GetDataTypeName(int i) { return ""; } public IDataReader GetData(int i) { return this; } public long GetChars(int i, long fieldoffset, char buffer, int bufferoffset, int length) { return -1; } public char GetChar(int i) { return " "; } public long GetBytes(int i, long fieldOffset, byte buffer, int bufferoffset, int length) { return -1; } public byte GetByte(int i) { return 0x00; } public bool GetBoolean(int i) { return false; } public int GetValues(Object values) { return -1; }
Где в Dispose() я просто закрываю файл.
После того как интерфейс реализован, можно написать метод для загрузки файла:
Void SaveToTable(FileInfo dir, string TableName, string connestionString, Dictionary
Вот и все. В эту функцию осталось передать расположение файла, имя таблицы, строку подключения и соответствующий словарь соответствий, например:
Dictionary
Все, всем спасибо за внимание, приятной загрузки.
Требуется втащить данные в MSSQL из какого-то полного говна, которое кроме как по ODBC никак и не подключить. Причем создавать коннект тоже лениво. Хорошо бы создать его налету.Несмотря на то, что dbf давно считается legacy форматом, сабж до сего времени остается насущной задачей судя по количеству вопросов в Интернете. В частности, я с ней столкнулся при попытке затянуть в таблицу карту. Карта ArcGIS содержала метаданные в формате dbf. Имело смысл прочитать их заодно в SQL Server, чтобы не делать вручную подписи к полигонам, линиям и иным картографическим объектам. В давние времена Visual FoxPro 6 и SQL Server 7.0 это не составляло проблемы, но с тех пор многое изменилось. С выходом SQL Server 2005 в MSDN появилась информация, что мастер импорта и экспорта в SQL Server не поддерживает импорт и экспорт dBASE-файлов и других DBF-файлов. В качестве решения рекомендовано использовать SQL Server Integration Services или промежуточный импорт в Access или Excel. Такая же ситуация формально сохраняется по сей день, включая SQL Server 2012. Это не всегда удобно, потому что, помимо SQL Server, требует дополнительной установки MS Office, а средства разработки ETL-пакетов не входят в состав бесплатной редакции SQL Server Express. В этой заметке я постараюсь импортировать dbf в SQL Server, не пользуясь ничем, кроме SQL Server.
Имеется файл regions2010_wgs.dbf, взятый отсюда. Открываем SQL Server Management Studio, в Object Explorer выбираем базу, в таблицу которой будем импортировать dbf, и из контекстного меню говорим Import Data:
В качестве источника данных указываем.Net Framework Data Provider for ODBC, коль скоро ODBC теперь снова наше все, в качестве ConnectionString - следующую строку соединения:
Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=NA;Exclusive=No; NULL=No;Deleted=No;BackgroundFetch=No
Нажимаем Next. Если теперь нажать Back, мы увидим, что свойства соединения развернулись из строки в столбец так, чтобы можно было лицезреть их список и видеть, чему каждое из них равно:
Примеры строки соединения для ODBC-драйвера dBase приводятся, например, в Microsoft Knowledge Base или на ресурсе connectionstrings.com. В целом, о назначении тех или свойств легко догадаться из их названий, кроме, пожалуй, свойства Deleted, которое имеет прямо противоположный смысл. Как известно, операция удаления строки в dBase/FoxPro не приводит к ее немедленному физическому удалению из файла. Строка лишь помечается, что она удалена. Физическая очистка строк, у которых проставлен признак удаления, и реорганизация файла выполняются командой PACK. Значение NO говорит драйверу включить удаленные строки в возвращаемый набор результатов. Чтобы, наоборот, их не показывать, надо поставить YES. Жмем Next.
На следующем экране все просто. Задается соединение с SQL Server, включая ту базу, в которой будет создана таблица с результатами импорта из dbf:
Идем дальше. Предлагается выбрать dbf-ную таблицу из списка таблиц или написать руками запрос. Имеет смысл, например, для FoxProшной базы, которая, как и всякая нормальная база, представляет собой контейнер, в котором содержится несколько таблиц, в данном случае в виде отдельных dbf-файлов. Для индивидуального dbf-файла это не работает - см., например, OdbcConnection.GetSchema(«tables») all wrong for .dbf file, и сотрудники поддержки Microsoft рекомендовали в этой ситуации использовать OLE DB Provider for Visual FoxPro. Во-первых, случай имел место задолго до коренного перелома генеральной линии партии. OLE DB тогда было наше все, a ODBC, наоборот, относилось к старым унаследованным интерфейсам. Во-вторых, я не понимаю, зачем броузить список dbf, когда он и так один.
В случае разрозненных dbf, лежащих в одной директории, надо задать в строке ODBC-соединения (Рис.3) свойство DefaultDir, например,
Driver={Microsoft dBase Driver (*.dbf)};sourcetype=DBF;DefaultDir=c:\Temp;exclusive=No;null=No;deleted=No;backgroundfetch=No
Тогда можно отметить Copy Data from one or more tables or views.
И будет выведен список dbf в этой директории, из которого будет предложено выбрать:
Но я не задавал DefaultDir на Рис.3, поэтому выбираю написать запрос:
И пишу:
А в ответ получаю ошибку The Microsoft Jet database engine could not find the object "regions2010_wgs.dbf":
Эта ошибка происходит из-за того, что глупый драйвер до сих пор воспринимает имена файлов в формате MS-DOS 8.3. Если переименовать файл regions2010_wgs.dbf в, скажем, aaa.dbf, а запрос Рис.8, соответственно, заменить на select * from c:\Temp\aaa.dbf, ошибка пропадает. Будет предложено выбрать существующую или задать название таблицы, которая будет создана на SQL Server в базе Database1 (см.Рис.4) под результаты импорта из dbf. Oставляю предлагаемое название как есть:
Нажав здесь же кнопку Preview, можно предварительно ознакомиться с содержимым dbf, которoе предполагается перенести на SQL Server:
Все хорошо, только удручает абракадабра вместо русского текста. Причину ее появления в популярной форме объясняет уважаемый автор Lalex здесь. Русские символы слетают из-за того, что глупый драйвер ожидает dbfный файл в DOSовской кодировке (CP866, она же OEM). Он, похоже, считает формат dbf очень древним, чисто досовским наследием. ArcView же по умолчанию считает DBF виндосовским форматом (ANSI 1251). Так и стоят эти две программы, как два бычка, упершись лбами.
Итак, причина ясна, осталось ее поправить. Пляски с бубном прописать в строку соединения collate=Machine или Russian / CodePage=ANSI / Collating Sequence=1251 к успеху не привели. Изменил 29-й байт в aaa.dbf на 0хС9 - ноль эмоций. Действительно, признак кодовой страницы в заголовке dbf драйвером игнорируется. Однако настройку драйвера можно изменить в реестре. Она хранится в DataCodePage по пути HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\xBase или HKLM\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Xbase или, соответственно, HKLM\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\xBase или HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Xbase в зависимости от того, был ли установлен на машину Office и если да, то как. По умолчанию, свойство действительно имеет значение OEM, что заставляет драйвер читать все dbfы из расчета этой кодировки. Если изменить его на ANSI
Кириллица в ANSIшном dbf"e, естественно, будет читаться по-человечески.
DBF - файл баз данных, возможность работы с которым раньше интегрировалась в среду Microsoft Office. С форматом работали приложения Access и Excel, позже Access был выведен из состава пакета и стал отдельной программой, а в Excel с 2007 года поддержка DataBaseFile была существенно ограничена.
При невозможности открыть DBF-файл напрямую в Excel его нужно предварительно конвертировать.
Однако DBF хоть и считается многими устаревшим форматом, но до сих пор широко используется в специализированных программах в сфере бизнеса, проектирования, инженерной сфере. Везде, где требуется работа с большими массивами информации, их структурирование и обработка, выполнение запросов. Например, программный комплекс 1С Предприятие целиком основан на управлении базами данных. А учитывая, что масса офисной документации и данных проходит в Excel, то вопрос интегрированной работы с этими форматами актуален и востребован.
В Excel 2003 была возможность открыть и редактировать DBF , а также сохранять в этом формате документы XLS:
ВАЖНО. Начиная с 2007 года вы можете открыть и просмотреть в Excel формат баз данных, но не можете вносить изменения, а также сохранять в нём документы.xls. Стандартные средства программы больше не предусматривают такой возможности.
Однако существуют специальные надстройки для приложения, добавляющие ему такую функцию. В сети на различных форумах программисты выкладывают свои разработки, можно найти разные варианты. Наиболее популярную надстройку, которая называется XslToDBF, можно скачать с сайта разработчика http://basile-m.narod.ru/xlstodbf/download.html. Загрузка бесплатная, но по желанию можно поддержать проект, перечислив любую сумму на кошелёк или карту.
Установка и использование:
Если вы не хотите ничего менять в Office, не доверяете надстройкам и сторонним приложениям, то можно предложить более трудоёмкий способ преобразовать файл XLS в DBF:
Такой способ не всегда работает удачно, часто возникают ошибки в обработке данных, в последующем сохранении. И он весьма долгий и неудобный.
Чтобы не мучиться самим с офисными программами, создано множество приложений , позволяющих перевести данные из одного формата в другой. Во-первых, почти все мощные программы по работе с СУБД предполагают возможность экспорта в XLS и загрузки из него. Во-вторых, есть небольшие утилиты, специализирующиеся на конвертации. Вот некоторые из них:
Во всех этих программах преобразование сводится к тому, что нужно открыть исходный файл, а затем выполнить команду «Конвертировать» или «Экспорт».
Существуют и бесплатные сервисы онлайн-преобразования. На таких сайтах предлагается прислать (загрузить) исходный файл, нажать «Конвертировать», после чего появится ссылка на преобразованный документ. Насколько можно доверять таким услугам, решение индивидуальное, на свой страх и риск.
Таким образом, открыть DBF в программе Excel можно, но если его версия 2007 и новее, то сделать с ним больше ничего не получится, только посмотреть. Для редактирования, сохранения в XLS есть специальные надстройки или программы, так же как и для преобразования в обратном направлении. Если у вас есть опыт конвертации и работы с DBF в разных приложениях, поделитесь своими советами в комментариях.
DBF – это популярный формат хранения и обмена данными между различными программами, а в первую очередь, между приложениями, которые обслуживают базы данных и электронные таблицы. Хотя он и стал устаревать, но продолжает оставаться востребованным в различных сферах. Например, с ним продолжают активно работать бухгалтерские программы, а контролирующие и государственные органы принимают значительную часть отчетов в данном формате.
Но, к сожалению, Эксель, начиная с версии Excel 2007, прекратил полноценную поддержку указанного формата. Теперь в этой программе можно только просмотреть содержимое DBF-файла, а сохранить данные с указанным расширением встроенными инструментами приложения уже не получится. К счастью, имеются другие возможности конвертации данных из программы Excel в нужный нам формат. Рассмотрим, каким образом это можно выполнить.
В Excel 2003 и в более ранних версиях этой программы можно было сохранить данные в формате DBF (dBase) стандартным путем. Для этого нужно было кликнуть по пункту «Файл» в горизонтальном меню приложения, а затем в открывшемся списке выбрать позицию «Сохранить как…» . В запустившемся окошке сохранения из списка требовалось выбрать наименование нужного формата и нажать на кнопку «Сохранить» .
Но, к сожалению, начиная с версии Excel 2007, разработчики Microsoft посчитали dBase устаревающим, а современные форматы Эксель слишком сложными для того, чтобы тратить время и средства на обеспечение полной совместимости. Поэтому в Excel осталась возможность читать DBF-файлы, но поддержка сохранения данных в этом формате встроенными программными инструментами была прекращена. Тем не менее, существуют некоторые способы конвертации данных сохраненных в Excel в DBF при помощи применения надстроек и другого программного обеспечения.
Существует ряд программ, которые позволяют конвертировать данные из Excel в DBF. Один из самых простых способов конвертирования данных из Excel в DBF является использование пакета утилит для конвертирования объектов с различным расширением WhiteTown Converters Pack.
Хотя процедура установки данной программы проста и интуитивно понятна, все-таки подробно остановимся на ней, указав на некоторые нюансы.
Сразу открывается вкладка «Input» («Ввод» ). Она предназначена для того, чтобы указать объект, который следует конвертировать. Для этого жмем по кнопке «Add» («Добавить» ).
Если же вы выберите вариант «Select Folder» , то откроется упрощенное окошко выбора директории. В нем будут отображаться только папки. Выбираем папку для сохранения и жмем на кнопку «OK» .
Делаем выбор того типа, который нужен для применения в конкретной программе.
Готовый документ будет расположен в той директории, которая была указана во вкладке «Output» .
Единственный существенный недостаток способа с применением пакета утилит WhiteTown Converters Pack состоит в том, что бесплатно можно будет провести только 30 процедур конвертирования, а потом придется приобретать лицензию.
Конвертировать книгу Эксель в dBase непосредственно через интерфейс приложения можно с помощью установки сторонних надстроек. Одной из лучших и наиболее удобных из них является надстройка XlsToDBF. Рассмотрим алгоритм её применения.
В самой верхней левой ячейке вписываем наименование, которое мы хотим присвоить создаваемому DBF-файлу. Оно состоит из двух частей: собственно названия и расширения. Допускается использование только латиницы. Пример такого наименования – «UCHASTOK.DBF» .
Кроме того, в строковом (Cnnn ) и числовом типе (Nnn ) после наименования в виде буквы следует указывать максимальное количество символов в поле. Если в числовом типе применяются десятичные знаки, то их количество тоже нужно указать после точки (Nnn.n ).
Существуют и другие типы данных в формате dBase (Memo, General и т.д.), но данная надстройка с ними работать не умеет. Впрочем, с ними не умел работать и Excel 2003, когда ещё поддерживал конвертацию в DBF.
В нашем конкретном случае первое поле будет строковым шириной в 100 символов (C100 ), а остальные поля будут числовыми шириной в 10 символов (N10 ).
Можно сделать и чуть проще, набрав комбинацию горячих клавиш Alt+F8 .
Как видим, данный способ значительно сложнее предыдущего. Кроме того, он весьма ограничен по количеству используемых типов полей и создаваемых типов объектов с расширением DBF. Ещё одним недостатком является то, что директорию создания объекта dBase можно назначать только перед процедурой конвертирования, путем прямого перемещения в папку назначения исходного Excel-файла. Среди преимуществ данного способа можно отметить то, что в отличие от предыдущего варианта, он абсолютно бесплатен и практически все манипуляции производятся непосредственно через интерфейс Эксель.
Хотя у новых версий Excel и нет встроенного способа сохранение данных в формате DBF, но, тем не менее, вариант с применением приложения Microsoft Access более всего приблизился к тому, чтобы назвать его стандартным. Дело в том, что эта программа выпущена тем же производителем, что и Эксель, и также входит в пакет Microsoft Office. К тому же, это самый безопасный вариант, так как не нужно будет связываться с программным обеспечением сторонних производителей. Microsoft Access специально предназначен для работы с базами данных.
Также существует возможность импорта информации отдельных диапазонов на листах. Но в нашем случае это не нужно. Устанавливаем переключатель в позицию «Листы» , а затем выбираем тот лист, откуда собираемся брать данные. Корректность отображения информации можно просмотреть в нижней части окна. Если все удовлетворяет, жмем на кнопку «Далее» .
В поле «Формат файла» выбираем один из трех типов формата DBF:
Нужно учесть, что чем современнее формат (выше порядковый номер), то тем больше существует возможностей по обработке в нем данных. То есть, выше вероятность того, что в файле удастся сохранить все данные таблицы. Но в то же время ниже вероятность того, что программа, куда вы в будущем собираетесь импортировать файл DBF, будет совместима именно с этим типом.
После того, как все настройки выставлены, жмем на кнопку «OK» .
Созданный файл в формате dBase будет находиться в той директории, которая была указана в окне экспорта. Далее с ним вы можете производить любые манипуляции, включая импорт его в другие программы.
Как видим, несмотря на то, что в современных версиях Excel отсутствует возможность сохранения файлов в формате DBF встроенными инструментами, тем не менее, данную процедуру можно осуществить с помощью применения других программ и надстроек. При этом следует отметить, что наиболее функциональный способ конвертирования – это использование набора утилит WhiteTown Converters Pack. Но, к сожалению, количество бесплатных преобразований в нем ограничено. Надстройка XlsToDBF позволяет выполнить конвертацию абсолютно бесплатно, но процедура намного сложнее. К тому же функционал данного варианта очень ограничен.
«Золотой серединой» является способ с использованием программы Access. Как и Excel – это разработка компании Microsoft, а поэтому сторонним приложением его уже не назовешь. К тому же данный вариант позволяет конвертировать файл Excel в несколько типов формата dBase. Хотя по этому показателю Access все-таки уступает программе WhiteTown.
Статьи по теме: | |
Обзор бесплатной версии Google Chrome
Опера;Mozilla Firefox;Амиго (аналогия гугловского браузера с упором на... Что лучше — аннотации или конечные заставки на ютуб?
Конечные заставки – это отличный способ привлечь аудиторию. С их помощью... Инструкция как прошить официальной прошивкой устройства Nexus (Видео)
Смартфон от Google и LG - Nexus 5 - это, несомненно, интересный продукт.... |