Сохранить файл в xml. Конвертация файлов XML в форматы Excel. Импорт нескольких файлов данных XML в качестве внешних данных

У вас есть идеальный файл со всеми вашими данными о продукте или статистике, и теперь вам нужны эти данные в формате XML.

Преобразование файла в XML теперь намного проще, чем раньше, XML стал популярным. Теперь доступно множество инструментов для конвертирования файлов из одного формата в другой.

Конечно, эти инструменты абсолютно бесполезны, если ваши данные не готовы к конверсии.

Данные должны быть структурированы и организованы таким образом, чтобы их можно было правильно преобразовать в XML.

Шаг 1 Какой формат является вашим исходным файлом?

Тип вашего файла будет определяющим фактором того, как вы приближаетесь к преобразованию. Если ваш файл является одним из следующих типов, вам повезло.
Ваше приложение будет конвертировать его для вас:

Примечание. Важно отметить, что файлы Microsoft экспортируются в определенном формате. Эти документы могут быть или не быть тем, что вы ожидаете. Они содержат элементы, относящиеся к форматированию вашего документа Excel. Это было бы не идеально, если вы используете данные в приложении, которое относится к формату входящих данных.

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

Программное обеспечение, такое как XML Spy, может конвертировать ваш код на основе SQL в документы XML. Когда у вас есть большой набор данных, настоятельно рекомендуется конвертировать.

Tab Delimited, CSV

Существуют другие инструменты конвертера, такие как XML-конвертер Rustemsoft или XML-Buddy (плагин Eclipse) из программного обеспечения Bocaloca. Эти приложения могут экспортировать ваши данные, а также предоставить вам файл XML Schema или DTD (определение типа документа), если это необходимо. Эти приложения очень удобны и делают процесс преобразования вашего файла или базы данных в XML более удобным для пользователя.

Шаг 2 Если вы на этом этапе, должны преобразовать его вручную.

Возьмем базовый текстовый документ и преобразуем его в XML. Но сначала о том, как быстро просмотреть основные правила XML:

XML. Расширяемый язык разметки представляет собой текстовый кросс-платформенный язык, который позволяет вам структурировать данные (например, адреса в адресной книге). Ожидается, что XML-документ будет иметь правильный синтаксис. Поэтому при создании XML-документов они должны быть хорошо сформированы. Хорошо сформированный документ имеет следующее:

Закрытые теги (<> или )

Атрибут элемента должен быть заключен в двойные кавычки

(<страна country id = «7»>)

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

Вот основной список голландских художников XVII века.

Рембрандт Ван Рейн, 1606-1669, Ночной дозор
Хендрик Аверкамп, 1585-1634, зима
Ян де Бисхоп, 1628-1671, Оостропорт

Как видите, данные разделяются запятыми.

Каждая строка представляет собой отдельный фрагмент данных. Каждый кусок имеет имя художника, год рождения и до смерти и, наконец, одну из их картин.

Поэтому нам нужно создать XML-файл со следующей структурой:

Имя художника
Год рождения художника
Год смерти художника
Живопись художника

Шаг 3 С учетом этого формата мы можем создать XML-файл.

Наш корневой элемент будет называться художниками, так как у нас есть список художников.


Rembrandt Van Rijn
1606
1669
Night Watch

Hendrick Avercamp
1585
1634
Winter

Jan de Bisschop
1628
1671
The Oostpoort

У каждого из наших художников есть две даты, связанные с ними, а также и картины.

Поэтому собираемся сделать имя, даты и нарисовать дочерний элемент рисования элементов. Они будут называться имя, год рождения, живопись и год. С этим файлом мы преобразуем данные, готовые к использованию по своему усмотрению.

Если необходимо создать файл XML-данных и файл схемы XML из диапазона ячеек на листе, можно использовать версию 1.1 надстройки "Средства XML для Excel 2003" для расширения существующих возможностей XML в Microsoft Excel 2007 и более поздних версиях.

Примечание: Эта надстройка была разработана для Excel 2003. Документация и пользовательский интерфейс ссылаются на списки, которые в версиях приложения позднее Excel 2003 называются таблицами Excel.

Дополнительные сведения о работе с этой надстройкой см. в статье Использование надстройки "Средства XML" версии 1.1 для Excel 2003 .

Действие 2. Преобразование диапазона ячеек в XML-таблицу

    Введите данные, для которых необходимо создать файл XML-данных и файл схемы XML. Данные должны быть представлены в табличном формате в виде столбцов и строк (так называемые обычные данные).

    На вкладке Надстройки в группе Команды меню щелкните стрелку возле надписи Средства XML и нажмите кнопку Преобразовать диапазон в список XML .

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

    В поле Первая строка содержит имена столбцов выберите Нет , если первая строка содержит данные, или Да , если первая строка содержит заголовки столбцов, и нажмите кнопку ОК .

    Excel автоматически создаст схему XML, выполнит привязку ячеек к схеме и создаст XML-таблицу.

    Важно: Если откроется редактор Visual Basic и отобразится сообщение об ошибке Visual Basic for Applications (VBA), выполните следующие действия.

    1. Нажмите кнопку ОК .

      В выделенной строке модуля кода VBA удалите из строки "50". Другими словами, измените:
      XMLDoc в качестве MSXML 2 . DOMDocument50
      Кому:
      XMLDoc как Msxml2. Домдокумент

      Нажмите клавишу F5 для поиска следующей строки, содержащей текст "XMLDoc As msxml2.DOMDocument50", нажмите кнопку ОК и измените строку, как в предыдущем пункте.

      Нажмите F5 еще раз, чтобы найти и изменить другие экземпляры строки.

      Если после нажатия клавиши F5 сообщения об ошибке VBA больше не отображается, закройте редактор Visual Basic, чтобы вернуться в книгу. Диапазон ячеек будет преобразован в XML-таблицу.

      Примечание: Чтобы отобразить все карты XML в книге, на вкладке Разработчик в группе XML нажмите кнопку Источник для отображения области задач "Источник XML". В нижней части области задач "Источник XML" нажмите кнопку Карты XML .

      Если вкладка Разработчик не видна, выполните три первых действия, указанных в следующем разделе, чтобы добавить ее на ленту Excel.

Действие 3. Экспорт XML-таблицы в файл XML-данных (XML)

Примечание: При создании карт XML и экспорте данных в Excel в XML-файлы существует ограничение на количество строк, которые можно экспортировать. При экспорте в XML-файл из Excel можно сохранить до 65 536 строк. Если файл содержит более 65 536 строк, Excel сможет экспортировать только первые строки (число строк mod 65 537). Например, если лист содержит 70 000 строк, Excel экспортирует 4464 строки (70 000 mod 65 537). Мы рекомендуем последовать одному из следующих советов: 1) используйте формат XLSX; 2) сохраните файл в формате "Таблица XML 2003 (*.xml)" (при этом будут потеряны сопоставления); 3) удалите все строки после 65 536 и затем снова выполните экспорт (при этом сопоставления сохранятся, но будут потеряны строки в конце файла).

При наличии карты XML сделайте следующее для импорта данных XML в сопоставленные ячейки:

Другие способы импорта данных XML

Дополнительные сведения о проблемах см. в разделе в конце этой статьи.

Импорт файла данных XML в качестве XML-таблицы

Импорт нескольких файлов данных XML

Импорт нескольких файлов данных XML в качестве внешних данных

Из импорта данных XML . Excel создаст уникальную карты XML для каждого импортируемого файла данных XML.

Примечание:

    Если вы используете Excel с подпиской на Office 365, щелкните Данные > Получить данные > Из файла > Из XML .

    Если вы используете Excel 2016 или более раннюю версию, на вкладке Данные нажмите кнопку Из других источников , а затем щелкните Из импорта данных XML .

    Выберите диск, папку или расположение в Интернете, где находится файл данных XML (XML-файл), который вы хотите импортировать.

    Выберите файл и нажмите кнопку Открыть .

    В диалоговом окне Импорт данных выберите один из следующих параметров:

    • В XML-таблицу в существующей книге. Содержимое файла импортируется в новую таблицу XML на новом листе. Если файл данных XML не ссылается ни на какую схему, Excel создает ее на основе этого файла.

      На существующий лист. Данные XML будут импортированы в двумерную таблицу, состоящую из строк и столбцов. Теги XML отображаются как заголовки столбцов, а данные выводятся в строках под соответствующими заголовками. Первый элемент (корневой узел) используется в качестве названия и отображается в указанной ячейке. Остальные теги сортируются в алфавитном порядке во второй строке. В этом случае схема не создается и вы не можете использовать карту XML.

      На новый лист. Excel добавляет в книгу новый лист и автоматически помещает данные XML в его левый верхний угол. Если файл данных XML не ссылается ни на какую схему, Excel создает ее на основе этого файла.

    Чтобы настроить поведение данных XML, например привязку данных, форматирование и макет, нажмите кнопку Свойства . Откроется диалоговое окно Свойства карты XML . Например, при импорте данных по умолчанию перезаписываются данные в сопоставленном диапазоне, но это поведение можно изменить.

Открытие файла данных XML для импорта данных

Распространенные проблемы при импорте данных XML

Если не удается выполнить проверку данных на соответствие карте XML, выводится диалоговое окно Ошибка импорта XML . Чтобы получить дополнительные сведения об ошибке, нажмите кнопку Сведения в этом диалоговом окне. В следующей ниже таблице описаны ошибки, которые часто возникают при импорте данных.

Ошибка

Объяснение

Ошибка при проверке схемы

Когда вы выбрали в диалоговом окне Свойства карты XML параметр Проверять данные на соответствие схеме при импорте и экспорте , данные были импортированы, но не проверены на соответствие указанной карте XML.

Некоторые данные были импортированы как текст

Часть импортированных данных или все данные были преобразованы из объявленного типа в текст. Чтобы использовать эти данные в вычислениях, необходимо преобразовать их в числа или даты. Например, значение даты, преобразованное в текст, не будет работать как нужно в функции ГОД, пока не будет преобразовано в тип данных "Дата". Excel преобразует данные в текст в следующих случаях:

    Данные имеют формат, который не поддерживается в Excel.

    Данные несовместимы с внутренним представлением типа данных XSD в Excel. Чтобы исправить эту проблему, удостоверьтесь, что данные XML соответствуют XML-схеме, проверив каждое из определений типа данных.

Ошибка разбора XML

Средству синтаксического анализа XML не удается открыть указанный XML-файл. Убедитесь, что в XML-файле отсутствуют синтаксические ошибки и XML построен правильно.

Не удается найти карту XML, соответствующую этим данным

Эта проблема может возникнуть в том случае, если для импорта выбрано несколько файлов данных XML и Excel не удается найти соответствующую карту XML для одного из них. Импортируйте схему для файла, указанного в строке заголовка этого диалогового окна, сначала следует, а затем повторно выполните импорт файла.

Не удается изменить размер XML-таблицы для включения данных

Вы пытаетесь добавить строки путем импорта или добавления данных в XML-таблицу, однако таблицу невозможно расширить. XML-таблицу можно дополнять только снизу. Например, сразу под XML-таблицей может находиться объект, такой как рисунок или даже другая таблица, который не позволяет расширить ее. Кроме того, возможно, что при расширении XML-таблицы будет превышен установленный в Excel предел по количеству строк (1 048 576). Чтобы исправить эту проблему, измените расположение таблиц и объектов на листе, чтобы XML-таблица могла дополняться снизу.

Указанный XML-файл не ссылается на схему

XML-файл, который вы пытаетесь открыть, не ссылается на схему XML. Для работы с данными XML, содержащимися в файле, Excel требуется схема, основанная на его содержимом. Если такая схема неверна или не отвечает вашим требованиям, удалите ее из книги. Затем создайте файл схемы XML и измените файл данных XML так, чтобы он ссылался на схему. Дополнительные сведения см. в статье Сопоставление XML-элементов с ячейками карты XML .

Примечание: Схему, созданную Excel, невозможно экспортировать в качестве отдельного файла данных схемы XML (XSD-файла). Хотя существуют редакторы схем XML и другие способы создания файлов схемы XML, возможно, вы не имеете к ним доступа или не знаете, как ими пользоваться.

Выполните следующие действия, чтобы удалить из книги схему, созданную Excel:

Возникают проблемы при импорте нескольких XML-файлов, которые используют одно пространство имен, но разные схемы

При работе с несколькими файлами данных XML и несколькими схемами XML стандартным подходом является создание карты XML для каждой схемы, сопоставление нужных элементов, а затем импорт каждого из файлов данных XML в соответствующую карту XML. При использовании команды Импорт для открытия нескольких XML-файлов с одним пространством имен можно использовать только одну схему XML. Если эта команда используется для импорта нескольких XML-файлов, использующих одно пространство имен при разных схемах, можно получить непредсказуемые результаты. Например, это может привести к тому, что данные будут перезаписаны или файлы перестанут открываться.

Если нужно импортировать несколько XML-файлов с одним пространством имен, но с разными схемами XML, вы можете воспользоваться командой Из импорта данных XML (выберите Данные > Из других источников ). Эта команда позволяет импортировать несколько XML-файлов с одним пространством имен и разными схемами XML. Excel создаст уникальную карты XML для каждого импортируемого файла данных XML.

Примечание: При импорте нескольких XML-файлов, в которых не определено пространство имен, считается, что они используют одно пространство имен.

При разработке системы электронного документооборота потребовалось реализовать функции для экспорта данных в популярных форматах. В частности, в формате Microsoft Excel. Требования к экспорту были довольно простые – экспортировать данные с минимумом форматирования, т.е. никаких объединенных ячеек, игр со шрифтами и т.п. Форматы экспорта XLSX и Excel XML.

В данном случае расскажу про Excel XML .

Итак, в любой системе оперирующей табличными данными раной или поздно возникает потребность экспорта данных. Цели экспорта разные:

Реализовать в классе набор функций для записи значений ячеек и ряда – основное требование, подразумевающее создание функций для записи значений ячеек указанных типов и возможность записи готового ряда в файл.

Возможность работы с неограниченным объемом данных – разумеется, сам класс экспорта отвечать за записываемый объем не сможет, но он должен предоставить функции для записи данных на диск и освобождения оперативной памяти для следующей порции данных.

Помимо описанных требований, понадобилось добавить сервисные функции:

  • Включение автофильтра
  • Сжатия файла в zip .

Реализация

Прежде всего, при создании класса осуществляю проверку конечного имени файла и запрашиваю количество колонок и рядов. Файл должен иметь корректное имя, а папка, в которую он будет сохранен, должна существовать. Все как обычно.
Формат Excel XML позволяет сохранять в файле информацию о пользователе, который его создал, поэтому, при создании заголовка записываю название организации, информация о пользователе и дате создания файла.

Public function writeDocumentProperties($organization = null, $user = null) { fwrite($this->file, ""); if (!is_null($user)) { fwrite($this->file, "".$user->description.""); fwrite($this->file, "".$user->description.""); } $dt = new Datetime(); $dt_string = $dt->format("Y-m-d\TH:i:s\Z"); fwrite($this->file, "".$dt_string.""); fwrite($this->file, "".$dt_string.""); if (!is_null($organization)) fwrite($this->file, "".$organization->name.""); fwrite($this->file, "12.00"); fwrite($this->file, ""); }
Правда, именно в этой функции используются сущности системы документооборота - organization (организация) и user (пользователь). Заменить эти сущности на, скажем, строковые значения, не проблема.

Наиболее интересной в заголовке является информация о стилях. В формате Excel XML они реализованы очень удобно, поэтому просто создаю таблицу со стилями для строк, даты/времени и гиперссылки.

Public function writeStyles() { fwrite($this->file, ""); //default style fwrite($this->file, ""); //Datetime style fwrite($this->file, ""); fwrite($this->file, ""); fwrite($this->file, ""); //Hyperlink style fwrite($this->file, ""); //Bold fwrite($this->file, ""); fwrite($this->file, ""); }

Подготовительные работы закончил, можно переходить к записи данных. Открытие рабочего листа – это всего пара тэгов, как раз в этот момент используется информация о количестве колонок и рядов.

Public function openWorksheet() { fwrite($this->file, ""); fwrite($this->file, strtr("

", array("{col_count}"=>$this->colCount, "{row_count}"=>$this->rowCount))); }
Но вот запись рядов – процесс поинтереснее. Класс должен работать быстро и обрабатывать неограниченный объем данных, ведь записей может быть тысяч сто или даже миллион! Хочешь скорости – работай с памятью, хочешь неограниченный объем данных – работай с диском. Чтобы помирить требования, реализовал функции resetRow и flushRow.
Первая – очищает текущий ряд, после чего его снова можно наполнять данными, а вторая – записывает текущий ряд в открытый файл на диск. Их совместное использование позволяет выдерживать баланс между скоростью и объемом используемой памяти.

Public function resetRow() { $this->currentRow = array(); } public function flushRow() { fwrite($this->file, implode("", $this->currentRow)); unset($this->currentRow); }
Каждая ячейка записывается функцией соответствующей типу данных, а именно appendCellxxx, где xxx – тип данных. Допустимые типы данных: Num, String, Real, DateTime, Date, Time, Link. Пример функции для записи числового значения:

Public function appendCellNum($value) { $this->currentRow = "".$value.""; }
После записи всех данных остается закрыть рабочий лист и рабочую книгу.

Применение

Использование описанного класса основано на экспорте данных с помощью провайдера CArrayDataProvider . Однако, предполагая, что объем экспортируемых данных может оказаться очень большим применен специальный итератор CDataProviderIterator , который перебирает возвращаемые данные по 100 записей (можно указать иное число записей).

Public function exportExcelXML($organization, $user, &$filename) { $this->_provider = new CArrayDataProvider(/*query*/); Yii::import("ext.AlxdExportExcelXML.AlxdExportExcelXML"); $export = new AlxdExportExcelXML($filename, count($this->_attributes), $this->_provider->getTotalItemCount() + 1); $export->openWriter(); $export->openWorkbook(); $export->writeDocumentProperties($organization, $user); $export->writeStyles(); $export->openWorksheet(); //title row $export->resetRow(); $export->openRow(true); foreach ($this->_attributes as $code => $format) $export->appendCellString($this->_objectref->getAttributeLabel($code)); $export->closeRow(); $export->flushRow(); //data rows $rows = new CDataProviderIterator($this->_provider, 100); foreach ($rows as $row) { $export->resetRow(); $export->openRow(); foreach ($this->_attributes as $code => $format) { switch ($format->type) { case "Num": $export->appendCellNum($row[$code]); /*other types*/ default: $export->appendCellString(""); } } $export->closeRow(); $export->flushRow(); } //close all $export->closeWorksheet(); $export->closeWorkbook(); $export->closeWriter(); //zip file $export->zip(); $filename = $export->getZipFullFileName(); }
В моем случае, каждый ряд записывается на диск, что, пока, является вполне приемлемым, но в будущем, возможно, потребует изменений. Например, будет разумно сохранять не каждый ряд, а каждый десяток или даже сотню рядов за раз. Тогда скорость экспорта увеличится.

Скорость

Кстати, на собственном опыте убедился, как важно предполагать возможность существования больших объемов данных при пакетной операции, такой как экспорт.
Изначально, пытался осуществлять экспорт данных используя

Объявление

Формат файлов XML Document

Будучи созданным в качестве формата для хранения текстовых данных, формат XML представляет собой документ, который понимают не только люди, но и машины. XML - это язык, не зависящий от платформы, который был создан для хранения различных данных. Обладая простотой и легкостью в использовании, данный язык не уступает в популярности языку HTML. Он также весьма распространен в Интернете. Тот факт, что файлы XML можно легко редактировать простейшими текстовыми редакторами, только увеличивает его популярность.

Технические сведения о файлах XML

Документ XML представляет собой последовательность символов, в которой каждый символ Unicode можно найти в каждом отдельном документе. Такой код из символов Unicode, который составляет документ XML, разделен на маркеры и текстовое содержание на основе простых синтаксических правил. У этого формата имеется важное преимущество перед HTML: формат XML поддерживает произвольное размещение тегов для четкого определения тех данных, которые такие теги охватывают.

Дополнительная информация о формате XML

Расширение файла .xml
Категория файлов
Файл-пример (252,17 KiB)
Связанные программы Microsoft Visual Studio 2013
JAPISoft EditiX
Wattle XMLwriter
MacroMates TextMate