Формат xml как создать из excel онлайн. Экспорт данных XML
При разработке системы электронного документооборота потребовалось реализовать функции для экспорта данных в популярных форматах. В частности, в формате Microsoft Excel. Требования к экспорту были довольно простые – экспортировать данные с минимумом форматирования, т.е. никаких объединенных ячеек, игр со шрифтами и т.п. Форматы экспорта XLSX и Excel XML.
В данном случае расскажу про Excel XML .
Итак, в любой системе оперирующей табличными данными раной или поздно возникает потребность экспорта данных. Цели экспорта разные:
Реализовать в классе набор функций для записи значений ячеек и ряда – основное требование, подразумевающее создание функций для записи значений ячеек указанных типов и возможность записи готового ряда в файл.
Возможность работы с неограниченным объемом данных – разумеется, сам класс экспорта отвечать за записываемый объем не сможет, но он должен предоставить функции для записи данных на диск и освобождения оперативной памяти для следующей порции данных.
Помимо описанных требований, понадобилось добавить сервисные функции:
- Включение автофильтра
- Сжатия файла в zip .
Реализация
Прежде всего, при создании класса осуществляю проверку конечного имени файла и запрашиваю количество колонок и рядов. Файл должен иметь корректное имя, а папка, в которую он будет сохранен, должна существовать. Все как обычно.Формат Excel XML позволяет сохранять в файле информацию о пользователе, который его создал, поэтому, при создании заголовка записываю название организации, информация о пользователе и дате создания файла.
Public function writeDocumentProperties($organization = null, $user = null)
{
fwrite($this->file, "
Правда, именно в этой функции используются сущности системы документооборота - organization (организация) и user (пользователь). Заменить эти сущности на, скажем, строковые значения, не проблема.
Наиболее интересной в заголовке является информация о стилях. В формате Excel XML они реализованы очень удобно, поэтому просто создаю таблицу со стилями для строк, даты/времени и гиперссылки.
Public function writeStyles()
{
fwrite($this->file, "
Подготовительные работы закончил, можно переходить к записи данных. Открытие рабочего листа – это всего пара тэгов, как раз в этот момент используется информация о количестве колонок и рядов.
Public function openWorksheet()
{
fwrite($this->file, " Public function resetRow()
{
$this->currentRow = array();
}
public function flushRow()
{
fwrite($this->file, implode("", $this->currentRow));
unset($this->currentRow);
}
Public function appendCellNum($value)
{
$this->currentRow = " 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();
}
Кому интересно, может получить исходный код моего класса безвозмездно. Только надо не забыть поправить функцию writeDocumentProperties
, чтобы отвязаться от сущностей системы документооборота organization и user, или использовать свои аналогичные сущности с соответствующими свойствами. Давно работаю с XML-файлами, но только сейчас задался вопросом: Как штатными средствами создавать и редактировать XML-файлы в MS Excel? Excel удобный и интуитивно понятный инструмент для создания, редактирования и обработки различных данных. Excel изучают в школе и, наверное, не найдется человека, умеющего работать на ПК и не владеющего основами работы в Excel. Поэтому на мой взгляд это наиболее подходящий инструмент, который можно рекомендовать простым пользователям для создания и редактирования файлов данных для различных приложений, в том числе Веб-приложений. У меня дома установлен MS Excel 2013 и на его примере я опишу те нехитрые процедуры, которые необходимо выполнить при создании XML-файла данных в Excel. Думаю, что и в более ранних версиях Excel это будет тоже работать. Чтобы создать XML-файл данных проделаем несколько несложных шагов. Рассмотрим их на примере создания файла данных событий . 1. Для начала необходимо в Excel создать и заполнить таблицу данных в соответствии со структурой данных. Используйте, пожалуйста, для этого пункт меню Вставка/Таблица
. 2. Создадим схему файла XML. Для этого в текстовом редакторе введем следующие строки и и сохраним их в файле. XHTML
xml
version
=
"1.0"
encoding
=
"utf-8"
standalone
=
"yes"
?>
3. Теперь откройте вкладку Разработчик
, нажмите кнопку Источник
и укажите файл-источник XML. При необходимости включите пункт меню Разработчик
в Настройках Excel. 4. Осталось сопоставить элементы схемы и колонки таблицы, перетащив элементы на соответствующие заголовки колонок. 5. И последний шаг: экспортировать данные таблицы в XML-файл с помощью контекстного меню. Встаньте на любую ячейку таблицы, нажмите правую кнопку мыши, выберите XML/Экспорт…
и сохраните XML-файл под нужным именем. Сохраните Excel-файл для последующего редактирования и дополнения. В последующем пункты 1.-4. проделывать будет не нужно! P.S. Зачем же я написал эту банальную заметку? Во-первых, чтобы самому не забыть, а во-вторых, думаю, что эта информация пригодится пользователям , начиная со следующей версии 0.6
;-) Вопрос о том, как с 1С сохранить в XML файл, волнует людей, которые работают с документацией фирмы и отчётами. В число таких специалистов входят бухгалтеры. Сегодняшние стандарты предполагают хранение большей части информации предприятия в программе 1С. При этом формирование документов в Эксель остаётся востребованным, потому что это необходимо для обработки данных, обмена счетами с контрагентами. Использование современных и прогрессивных способов передачи информации между 1С и Excel сильно экономит время человека, который этим занимается. Для быстрого осуществления этой операции предусмотрена процедура выгрузки. Зайдя в 1С, пользователь выбирает раздел «Файл», затем «Выгрузка». На жёстком диске компьютера либо на съёмном устройстве выбирается конкретная локация, куда будет отправлен файл, и его формат. Если нужен файл Эксель, выбираем формат XML. Выгрузка больших документов занимает много времени. Перед её началом желательно разобраться, какой конкретно объём информации вас интересует, и выгрузить именно его. Это достигается путём выделения нужных блоков при работе в 1С. Если нужно добавить новые позиции к уже имеющимся данным в XML, это осуществляется путём выгрузки в существующий документ, во время которой происходит слияние. Когда нужно добавить несколько строк, это проще сделать через буфер обмена. Как перенести данные из XML файла в 1С? Чаще при работе предприятия нужно провести обратную процедуру: получить файл Эксель в 1С. Рассмотрим, как это сделать. Современные версии 1С предлагают осуществлять подобную процедуру через вкладку «Импорт» либо «Загрузка». Они расположены в той же категории «Файл». Пользователь выбирает нужный документ на компьютере или съёмном диске, после чего он загружается в базу 1С. Разработчики 1С предусмотрели «карантинную» зону, куда сначала отправляются файлы после загрузки из других программ. Такая зона нужна, чтобы предварительно проверить достоверность данных и особенно форматирование. Если форматирование сбито, его сначала нужно восстановить с помощью специальных сервисов или вручную. Загрузка данных с нарушенным форматированием в 1С приводит к сбоям и искажениям в базе данных. Если возникают сложности в загрузке данных либо постоянно сбивается формат, то нужно проверить актуальность версий программ 1С и Эксель. Если использовать современные версии, то шанс возникновения проблем минимальный. Настройка сериализации при переносе в 1С Сериализацией называется процесс преобразования данных из 1С в Эксель и обратно. Процедура сериализации запускается автоматически, когда пользователь выбирает импорт либо экспорт данных из 1С. Не помешает предварительная настройка переноса и сериализации файлов. Предусмотрена возможность выбрать формат файлов, разрядность и другие параметры, которые помогут избежать ошибок при обмене данными между разными программами. Чтобы загружать в 1С большое количество файлов из Эксель, не получится обойтись стандартным копированием. Для таких целей разрабатывается специальный загрузчик, который осуществляет подключение к 1С и контролирует процедуру загрузки. Часто компании приходится заказывать такую программу для переноса данных у разработчиков с учётом особенностей конкретно данного предприятия. Это требует затрат, но окупается благодаря тому, что скорость загрузки файлов с зарплатой и других документов заметно возрастает, а ошибки при переносе исчезают. Использование веб-сервисов для переноса данных в 1С Для загрузки данных в 1С можно использовать специализированные веб-сервисы. Они помогают сформировать файл Эксель в 1С и не требуют финансовых затрат. Подгрузить информацию с их помощью можно однократно либо использовать такие сервисы постоянно. Желательно выбрать сервисы, которые совместимы с вашими версиями программ, тогда вероятность сбоев станет низкой. Работа по отправке данных с 1С 7.7 не подразумевает специального образования, но требует навыков и опыта. Если к делу приступает необученный сотрудник, его желательно контролировать, чтобы база данных организации не наполнилась недостоверной либо повреждённой информацией. При любых процедурах переноса данных большое внимание следует уделять сохранности структуры данных. В рамках этого желательно выполнять следующие рекомендации. Перед началом загрузки удостовериться, что версии программ совместимы. Загружать данные в «карантинную» зону 1С, чтобы непроверенные данные не попадали сразу в единую базу данных и не искажали её. Проверять формат данных, которые были получены из Эксель. Если в процессе переноса формат был сбит, потребуется потратить время, чтобы его восстановить. Если этого не сделать, то отдельные ячейки могут суммироваться непредсказуемым образом: количество товара с массой, цена с общей стоимостью. Это собьёт систему статистики и анализа данных. Желательно, чтобы загруженные данные перед отправкой в базу проверял опытный сотрудник: владелец предприятия, главный бухгалтер или иное ответственное лицо. Для персонала полезно выработать и озвучить правила загрузки файлов. Часто ошибки и сбои возникают по причине невнимательности, рассеянности, халатности отдельных сотрудников. Они заносят данные из двух ячеек в одну, применяют разные сокращения, разные знаки (точку и запятую) при записи дробных чисел, совершают другие подобные оплошности, которые сильно сбивают формат и приводят к нежелательным сбоям и ошибкам. Для руководства предприятия стоит разработать единый формат записи данных, тогда при переносе через загрузчик или вручную будет меньше проблем. Автоматизация компании с помощью разработок 1С предполагает, что сотрудники всех уровней будут применять единую программу для ввода данных. Если отдельные кадры не умеют пользоваться такой системой или допускают оплошности при вводе значений, полезно провести дополнительное обучение. Сегодня разработчики программ типа 1С предлагают постоянные обновления, упрощающие работу с данными, поэтому не помешает проверять обновления и загружать их для программы. Это поможет использовать последние разработки для упрощения загрузки и выгрузки информации. XML в Excel и обратно, давайте поближе познакомимся с типами этих файлов. Здесь нужно сразу отметить, что документы Excel имеют множество форматов, в то время, как XML - и есть формат файла. Поэтому не стоит путать эти два понятия. Microsoft Excel является мощной программой для вычислений с множеством полезных функций Программа Microsoft Excel является специальной утилитой, предназначенной для создания и редактирования таблиц. С ними вы уже можете делать всё что угодно: создавать базы, диаграммы, формулы и другие типы данных. Это очень мощный инструмент, поэтому все его возможности мы обсуждать не будем. Сегодня наша цель несколько другая, и мы не станем отходить от темы сегодняшней дискуссии. Файлы XML, для более простого понимания, предназначены для хранения, обмена различных данных между утилитами. Особенно часто пользуются этим языком разметки при передаче информации через интернет. И когда вам нужно перенести табличные данные из Экселя на сайт, например, то вам нужно будет преобразовать свой документ, чтобы он правильно отображался. Поэтому давайте не будем оттягивать момент истины и сразу приступим к выполнению операции. Дорогие друзья, на самом деле преобразование файлов является достаточно простым занятием. Однако, у некоторых пользователей могут возникнуть проблемы при переносе данных, поэтому сегодня мы с вами рассмотрим несколько способов для осуществления нашего замысла. Поэтому набираемся терпения и приступаем к действиям: Прежде чем перевести XML в Excel, нужно его для начала открыть. Рассмотрим весь этот непродолжительный процесс ниже. Итак, приступаем: Дорогие читатели, сегодня мы с вами узнали не только как преобразовать файлы XML в Excel и обратно, но и как создать и открыть их при несовместимости версий. Надеемся, что у вас всё получилось и больше не осталось никаких вопросов. Не забываем делиться в комментариях своим мнением и опытом: возможно, вы знаете простой способ конвертации. Расскажите другим пользователям, получилось ли у вас перевести один тип документа. Если сработало, то поделитесь тем, каким способом воспользовались вы.", array("{col_count}"=>$this->colCount, "{row_count}"=>$this->rowCount)));
}
Но вот запись рядов – процесс поинтереснее. Класс должен работать быстро и обрабатывать неограниченный объем данных, ведь записей может быть тысяч сто или даже миллион! Хочешь скорости – работай с памятью, хочешь неограниченный объем данных – работай с диском. Чтобы помирить требования, реализовал функции resetRow и flushRow.
Первая – очищает текущий ряд, после чего его снова можно наполнять данными, а вторая – записывает текущий ряд в открытый файл на диск. Их совместное использование позволяет выдерживать баланс между скоростью и объемом используемой памяти.
Каждая ячейка записывается функцией соответствующей типу данных, а именно appendCellxxx, где xxx – тип данных. Допустимые типы данных: Num, String, Real, DateTime, Date, Time, Link. Пример функции для записи числового значения:
После записи всех данных остается закрыть рабочий лист и рабочую книгу.Применение
Использование описанного класса основано на экспорте данных с помощью провайдера CArrayDataProvider . Однако, предполагая, что объем экспортируемых данных может оказаться очень большим применен специальный итератор CDataProviderIterator , который перебирает возвращаемые данные по 100 записей (можно указать иное число записей).
В моем случае, каждый ряд записывается на диск, что, пока, является вполне приемлемым, но в будущем, возможно, потребует изменений. Например, будет разумно сохранять не каждый ряд, а каждый десяток или даже сотню рядов за раз. Тогда скорость экспорта увеличится.Скорость
Кстати, на собственном опыте убедился, как важно предполагать возможность существования больших объемов данных при пакетной операции, такой как экспорт.
Изначально, пытался осуществлять экспорт данных используя CActiveDataProvider , что требовало при экспорте 1000 записей порядка 240 секунд! Изменив запрос так, чтобы использовать CArrayDataProvider сократил время экспорта 1000 записей до 0.5 секунды!
Специально для этой публикации замерил показатели экспорта.
Экспортировал 1626
записей с 9
атрибутами, представляющих собой информацию о закрытых инцидентах (см. ITSM).Исходный вид экспортируемой таблицы
Результат
(извините, картинка исчезает после публикации)Показатели экспорта
Объем конечного файла: 1 312 269
Объем сжатого файла: 141 762
Затраченное время: примерно 0.5
сек
Как преобразовать Excel в XML
Как перевести XML в Excel
Подведём итоги
Рекомендуем также