Как из xls сделать xml. Экспорт данных XML. Редактирование, сохранение и экспорт

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

Важно:

Экспорт данных XML (не более 65 536 строк)

Экспорт данных XML (более 65 536 строк)

    Найдите разность общего количества строк в файле и числа 65 537. Обозначим это число как x.

    Удалите x строк с начала листа Excel.

    Экспортируйте лист в файл данных XML (в предыдущем разделе описана процедура).

    Нажмите кнопку Закрыть , но не сохранить лист. Затем снова откройте лист Excel.

    Удалите все данные после всего x, а затем экспортируйте их в виде файла данных XML (ознакомьтесь с предыдущим разделом процедуры).

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

Сохранение данных XML в сопоставленных ячейках в файле данных XML

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

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

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

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

Эту карту XML можно экспортировать, но некоторые необходимые элементы не сопоставлены

Такое сообщение может появиться по следующим причинам.

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

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

    Элемент представляет собой рекурсивную структуру.

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

    XML-таблица содержит смешанное содержимое.

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

Невозможно экспортировать карты XML в книге

Карту XML не удастся экспортировать, если невозможно сохранить отношения сопоставленного элемента с другими элементами. Отношение может не сохраниться по следующим причинам.

    Определение схемы сопоставленного элемента содержится в последовательности со следующими атрибутами:

    • атрибут maxoccurs не равен 1;

      последовательность содержит более одного прямого дочернего элемента или включает в себя другой составной объект в качестве такого элемента.

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

    Несколько повторяющихся элементов сопоставлены с одной и той же XML-таблицей, и повторение не определено предком.

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

Кроме того, невозможно экспортировать карту XML, если она содержит одну из следующих конструкций схемы XML.

    Список списков. В одном списке элементов есть другой список элементов.

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

    Выбор. Сопоставленный элемент является частью конструкции схемы .

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

Как открыть XML в Excel: способ первый

Рассмотрим импорт данных на основе Excel версии 2016 года. Первый и самый простой способ состоит в том, чтобы изначально запустить программу Excel. При старте приложение вместо приветствия и логотипа выдаст специальное окно входа, в котором слева в меню присутствует строка «Открыть другие книги».

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

Как открыть формат XML в Excel: способ второй

Практически ничем не отличается от первого еще один предлагаемый метод. Файл XML в Excel можно открыть из файлового меню или использовать для этого быстрое сочетание Ctrl + O.

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

Открытие XML: способ третий

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

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

Редактирование, сохранение и экспорт

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

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

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

Если пользователю лень заниматься подобными преобразованиями, или в работе он использует версию Office ниже версии 2003, для открытия данного формата в виде таблицы придется использовать специальный конвертор. Таких программ сейчас предлагается достаточно много. В крайнем случае, если и это не подходит, без проблем можно обратиться к специализированным онлайн-сервисам, на которых формат будет изменен в течение пары десятков секунд. По окончании таких действий останется только загрузить готовый результат в формате XLS на жесткий диск, а потом открыть его в Excel. Впрочем, в большинстве случаев такие действия не требуются, поскольку в том же Office 2003 возможность прямого открытия (импорта) формата XML уже предусмотрена изначально. И думается, мало кто сегодня использует устаревшие офисные продукты Microsoft.

При разработке системы электронного документооборота потребовалось реализовать функции для экспорта данных в популярных форматах. В частности, в формате 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:

  1. В окне базы данных выделите необходимый объект щелчком левой кнопки мыши и выберите команду Файл, Экспорт (File, Export) или щелкните по объекту правой кнопкой и выберите в контекстном меню команду Экспорт (Export).
  2. Появится диалоговое окно Экспорт объекта (Export To). В раскрывающемся списке Типы (Save as type) выделите элемент Документы XML (XML Documents). В поле Имя файла (File name) введите название документа HTML и нажмите кнопку Экспорт (Export).
  3. Появится диалоговое окно Экспорт XML (Export XML) (рис. 12.9).
  4. Это диалоговое окно содержит три флажка для трех составляющих документа XML: данных, схемы данных и представления данных (о них см. разд. "Формат XML в Microsoft Office 2002" данной главы). Установите флажки для тех частей документа XML, которые необходимо получить в результате экспорта. Например, если установить одновременно флажки данные (XML) (Data (XML)) и схема данных (Schema of the data), то схема данных будет экспортирована и сохранена отдельно от файла данных XML, в файле XSD. Для таблиц можно экспортировать только данные или их структуру или данные и структуру вместе и не экспортировать представление таблицы в виде Web-страницы: флажок презентация данных (XSL) (Presentation of your data (XSL)) можно снять.

Рис. 12.9. Диалоговое окно Экспорт XML

Замечание

Флажок данные (XML) следует сбросить лишь в том случае, если вы хотите экспортировать только новое представление объекта базы данных, а данные были экспортированы в файл XML раньше. Иначе при открытии полученной Web-страницы будет выдано сообщение об ошибке подключения к источнику данных, а сама страница окажется практически пустой.

  1. Чтобы установить дополнительные параметры преобразования, нажмите кнопку Дополнительно (Advanced) (рис. 12.10).

Рис. 12.10. Вкладка Данные диалогового окна Экспорт XML

  1. Кроме того, это диалоговое окно содержит еще две вкладки для двух оставшихся составляющих документа XML: схемы данных и представления данных. На каждой из этих вкладок можно установить флажок, позволяющий экспортировать соответствующую часть документа XML, указать путь и имя файла, в котором будет сохранена эта часть документа, и задать некоторые дополнительные параметры:
    • на вкладке Данные (Data) с помощью раскрывающегося списка Кодировка (Encoding) можно выбрать кодировку для сохранения содержимого страницы;
    • на вкладке Схема (Schema) с помощью переключателей можно выбрать, экспортировать ли структуру данных в отдельный файл XSD или внедрить ее в файл XML вместе с данными;

Рис. 12.11. Отчет "Счет", открытый в базе данных

  • на вкладке Презентация (Presentation) с помощью переключателей можно выбрать формат представления Web-страницы: обрабатываемый на стороне клиента HTML или на стороне сервера ASP. Если экспортируемый объект содержит рисунки, которые необходимо включить в результирующий документ, можно указать имя папки, в которой они расположены. На этой же вкладке есть поле для ввода имени файла XSL с описанием оформления страницы. Если указанный файл не существует, Access 2002 создаст файл в формате XSL описанием внешнего представления документа (разработчик может использовать его в дальнейшем как основу для разработки файла в формате XSLT для преобразования документа XML в другой формат).

Если потребуется дополнительная информация о представлении данных в формате XML, нажмите кнопку Справка (Help). Информацию о разработке и преобразовании документов XML можно найти на Web-узле Microsoft для разработчиков: http://msdn.microsoft.com/ .

Рис. 12.12. Отчет "Счет", данные которого преобразованы в формат XML, открытый в Internet Explorer

  1. Нажмите кнопку ОК.
  2. Если предложенные параметры преобразования не были изменены, в результате будут созданы три файла: XML - с данными, XSL - со стилями и НТМ - с представлением преобразованного объекта. Чтобы открыть полученную Web-страницу, требуется открыть в Internet Explorer файл НТМ или ASP, в зависимости от того, какой формат представления был выбран..

К сожалению, подчиненные формы и отчеты, а также связанные рисунки не будут добавлены в документ XML, полученный из объекта базы данных. Однако простые объекты с внедренными рисунками, экспортированные в формат XML, будут выглядеть практически точно так же, как исходные в Access. Вы можете в этом убедиться, сравнив, к примеру, исходный и преобразованный в формат XML отчет "Счет" (Invoice) из базы данных "Борей" (Northwind) (рис. 12.11 и 12.12).

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

Замечание

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