Создаём XML-файл. Создание файла XML-данных и файла схемы XML из данных листа Как сохранить файл в хмл

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

Если необходимо создать файл 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 и затем снова выполните экспорт (при этом сопоставления сохранятся, но будут потеряны строки в конце файла).

Действие 4. Сохранение схемы XML в файле схемы XML (XSD)

Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также (на английском языке).

При разработке системы электронного документооборота потребовалось реализовать функции для экспорта данных в популярных форматах. В частности, в формате 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(); }
В моем случае, каждый ряд записывается на диск, что, пока, является вполне приемлемым, но в будущем, возможно, потребует изменений. Например, будет разумно сохранять не каждый ряд, а каждый десяток или даже сотню рядов за раз. Тогда скорость экспорта увеличится.

Скорость

Кстати, на собственном опыте убедился, как важно предполагать возможность существования больших объемов данных при пакетной операции, такой как экспорт.
Изначально, пытался осуществлять экспорт данных используя CActiveDataProvider , что требовало при экспорте 1000 записей порядка 240 секунд! Изменив запрос так, чтобы использовать CArrayDataProvider сократил время экспорта 1000 записей до 0.5 секунды!
Специально для этой публикации замерил показатели экспорта.
Экспортировал 1626 записей с 9 атрибутами, представляющих собой информацию о закрытых инцидентах (см. ITSM).
Исходный вид экспортируемой таблицы
Результат
(извините, картинка исчезает после публикации)
Показатели экспорта
Объем конечного файла: 1 312 269
Объем сжатого файла: 141 762
Затраченное время: примерно 0.5 сек

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

Расскажу вам быстрый способ создания xml-файла из таблицы экселя!

XML документы — это очень сильная и мощная вещь. С помощью одного XML файла можно наполнить сайт информацией за считанные секунды! Ведь во всех современных движках (CMS) присутствует возможность импорта из хмл файла. Так к чему это я.

Как известно, форматы *.xls (*.xlsx в 2007 офисе) — это форматы Microsoft Office Excel. 2003 офис ушел в прошлое, уже есть 2010, но я работаю на 2007, а, следовательно, рассказывать буду, основываясь на нем. Погнали!

1. Заходим на сайт Microsoft, и скачиваем надстройку для работы с XML. Скачать Excel 2003 Add-in: XML Tools Add-in . Весит она не много, 397 KB.



2. Устанавливаем ее к себе на компьютер. Сложного в установке ничего нет. По умолчанию надстройка устанавливается вот сюда: c:\Office Samples\OfficeExcel2003XMLToolsAddin

3. Теперь открываем Excel, заходим в меню и выбираем пункт «Параметры Excel».

4. В появившемся окне, слева, выбираем пункт «Надстройки», а внизу окна, нажимаем на кнопку «Перейти…»

5. Перед вами откроется новое окно, в нем вам необходимо нажать кнопку «Обзор…». Как оно выглядит, показано ниже.

6. Теперь вам необходимо найти установленную надстройку XmlTools (смотреть ). Выбрать ее и нажать ОК!

7. Если вы все сделали правильно, вы увидите следующее окно! Смело жмем ОК, установка завершена!

8. У вас появилось в верхнем меню вкладка надстройка, а слева пункт XML Tools.

С установкой разобрались, а теперь переходим непосредственно к конвертированию (экспорту) xls в xml.

1. Для этого открываем файл с данными, которые необходимо перегнать. Затем выбираем первый пункт в раскрывающемся меню «Convert a Range to an XML List…»

2. Перед вами откроется небольшое окошко, что вам в нем необходимо? Там есть радио кнопки, No и Yes, для чего они? Все просто, если у вас есть заголовок к данным (в моем случае он есть) выбираем Yes, а если его нет, то соответственно No. Затем нажимаем на маленький прямоугольник в верхней строке.

3. Выделяем область данных, которые конвертируем и нажимаем на кнопку справа в появившемся окне. Возвращается предыдущее окно, в котором жмем ОК.

4. Ваша табличка должна измениться, можно сказать преобразиться, у меня это выглядит вот так:

6. В раскрывающемся списке «Тип файла» выбираем XML-данные, нажимаем «Сохранить».

Я вас поздравляю, ваш файл создан!

Надеюсь, все было изложено подробно и понятно, однако если возникнут вопросы, пишите!

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

Сам по себе XML — это язык разметки, чем-то похожий на HTML, который используется на веб-страницах. Но если последний применяется только для вывода информации и её правильной разметки, то XML позволяет её структурировать определённым образом, что делает этот язык чем-то похожим на аналог базы данных, который не требует наличия СУБД.

Создавать XML-файлы можно как при помощи специализированных программ, так и встроенным в Windows текстовым редактором. От вида используемого ПО зависит удобство написания кода и уровень его функциональности.

Способ 1: Visual Studio

Вместо этого редактора кода от Microsoft можно использовать любой его аналог от других разработчиков. По факту Visual Studio является более расширенной версией обычного «Блокнота» . Код теперь имеет специальную подсветку, ошибки выделяются или исправляются автоматически, также в программу уже загружены специальные шаблоны, которые позволяют упростить создание XML-файлов больших объёмов.

Для начала работы вам нужно создать файл. Нажмите по пункту «Файл» в верхней панели и из выпадающего меню выберите «Создать…» . Откроется список, где указывается пункт «Файл» .

  • Вас перебросит в окно с выбором расширения файла, соответственно выбирайте пункт «XML-файл» .
  • В только что созданном файле уже будет первая строка с кодировкой и версией. По умолчанию прописана первая версия и кодировка UTF-8 , которые вы можете поменять в любое время. Дальше для создания полноценного XML-файла вам нужно прописать всё то, что было в предыдущей инструкции.

    По завершении работы снова выберите в верхней панели «Файл» , а там из выпадающего меню пункт «Сохранить всё» .

    Способ 2: Microsoft Excel

    Можно создать XML-файл и не прописывая код, например, при помощи современных версий Microsoft Excel , который позволяет сохранять таблицы с данным расширением. Однако нужно понимать, что в этом случае создать что-то более функциональное обычной таблицы не получится.

    Такой способ больше подойдёт тем, кто не хочет или не умеет работать с кодом. Однако в этом случае пользователь может столкнуться с определёнными проблемами при перезаписи файла в XML-формат. К сожалению, проделать операцию преобразования обычной таблицы в XML можно только на самых новых версиях MS Excel. Чтобы это сделать, используйте следующую пошаговую инструкцию:


    Способ 3: Блокнот

    Для работы с XML вполне подойдёт даже обычный «Блокнот» , однако пользователю, который не знаком с синтаксисом языка, придётся трудно, так как в нём нужно прописывать различные команды и теги. Несколько проще и значительно продуктивнее процесс будет идти в специализированных программах для редактирования кода, например, в Microsoft Visual Studio. В них есть специальная подсветка тегов и всплывающие подсказки, что значительно упрощает работу человеку, плохо знакомому с синтаксисом этого языка.

    Для этого способа не потребуется что-либо скачивать, так как в операционную систему уже встроен «Блокнот» . Давайте попробуем сделать в нём простую XML-таблицу по данной инструкции:


    Примерно так у вас должен выглядеть готовый результат:




    25
    True


    XML-компиляторы должны обработать этот код в виде таблицы с одной колонкой, где указаны данные о неком Иване Иванове.

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

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

    XML – это универсальный формат работы с данными. Его поддерживает множество программ, в том числе из сферы СУБД. Поэтому конвертация информации в XML важна именно с точки зрения взаимодействия и обмена данными между различными приложениями. Excel как раз входит в число программ, которые работают с таблицами, и даже может выполнять манипуляции с базами данных. Разберемся, как конвертировать файлы Эксель в XML.

    Конвертация данных в формат XML не такой уж простой процесс, так как в его ходе должна быть создана специальная схема (schema.xml). Впрочем, для преобразования информации в простейший файл данного формата достаточно иметь под рукой обычные инструменты сохранения в Excel, а вот для создания хорошо структурированного элемента придется основательно повозиться с составлением схемы и её подключением к документу.

    Способ 1: простое сохранение

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


    Таким образом, преобразование файла из формата Excel в XML будет совершено.

    Способ 2: инструменты разработчика

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

    1. По умолчанию вкладка инструментов разработчика отключена. Поэтому, прежде всего, нужно её активировать. Переходим во вкладку «Файл» и кликаем по пункту «Параметры» .
    2. В открывшемся окне параметров перемещаемся в подраздел «Настройка ленты» . В правой части окна устанавливаем галочку около значения «Разработчик» . После этого жмем на кнопку «OK» , размещенную в нижней части окна. Вкладка инструментов разработчика теперь включена.
    3. Далее открываем таблицу Excel в программе любым удобным способом.
    4. На её основе нам предстоит создать схему, которая формируется в любом текстовом редакторе. Для этих целей можно использовать и обычный Блокнот Windows, но лучше применять специализированное приложение для программирования и работы с языками разметки Notepad++ . Запускаем эту программу. В ней создаем схему. На нашем примере она будет выглядеть, как показано внизу на скриншоте окна Notepad++.

      Как видим, открывающим и закрывающим тегом для документа в целом служит «data-set» . В этой же роли для каждой строки выступает тег «record» . Для схемы вполне будет достаточно, если мы возьмем всего две строки таблицы, а не будем переводить её всю вручную в XML. Название открывающего и закрывающего тега столбца может быть произвольным, но в данном случае для удобства мы предпочли просто перевести русскоязычные наименования колонок на английский язык. После того, как данные внесены, просто сохраняем их через функционал текстового редактора в любом месте на жестком диске в формате XML под названием «schema» .

    5. Опять переходим к программе Excel с уже открытой таблицей. Перемещаемся во вкладку «Разработчик» . На ленте в блоке инструментов «XML» кликаем по кнопке «Источник» . В открывшемся поле в левой части окна жмем на кнопку «Карты XML…» .
    6. В открывшемся окне кликаем по кнопке «Добавить…» .
    7. Запускается окно выбора источника. Переходим в директорию расположения схемы составленной ранее, выбираем её и кликаем по кнопке «Открыть» .
    8. После того, как элементы схемы появились в окне, перетаскиваем их с помощью курсора в соответствующие ячейки наименования столбцов таблицы.
    9. Кликаем правой кнопкой мыши по полученной таблице. В контекстном меню последовательно переходим по пунктам «XML» и «Экспорт…» . После этого сохраняем файл в любой директории.

    Как видим, существуют два основных способа конвертации файлов XLS и XLSX в формат XML программой Microsoft Excel. Первый из них предельно простой и заключается в элементарной процедуре сохранения с заданным расширением через функцию «Сохранить как…» . Простота и понятность данного варианта, несомненно, являются преимуществами. Но у него есть один очень серьезный недостаток. Преобразование выполняется без учета определенных стандартов, и поэтому файл, конвертируемый таким способом, сторонними приложениями может просто не распознаваться. Второй вариант предполагает составление карты XML. В отличие от первого способа, таблица, преобразованная по данной схеме, будет соответствовать всем стандартам качества XML. Но, к сожалению, не каждый пользователь сможет быстро разобраться с нюансами этой процедуры.