Конвертация файлов XML в форматы Excel

Трюк №95. Загрузка документа XML в Excel

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

В последние несколько лет язык XML (Extensible Markup Language, букв, «расширяемый язык разметки») стал распространенным форматом обмена информацией, и нет ничего необычного в том, что люди и организации отправляют друг другу файлы XML. Простые структуры, лежащие в основе XML, делают обмен информацией чрезвычайно простым, причем неважно, используют ли все стороны одно и то же программное обеспечение и браузеры. Однако до недавних пор, хотя общие утилиты XML стали широко распространены, заполнить пробел между документами XML и пользовательским интерфейсом было еще достаточно трудно. Microsoft Excel упрощает эту задачу, по крайней мере, для данных в сетке таблицы.

В этом трюке используются возможности Excel, доступные только в Excel для Windows старше 2003 года. Более ранние версии Excel не поддерживают их; эти возможности не поддерживаются и в существующих, и планируемых версиях Excel для Macintosh.

Начнем с простого документа XML, приведенного в листинге 8.1.

// Листинг 8.1. Простой документ XML для анализа в Excel 2003-10-05 0596005385 Off1ce 2003 XML Essentia1s

34.95 200 Zork’s Books

2003-10-05 0596002920 XML in a Nutshell. 2nd Edition

90 Zork’s Books 2003-10-05 0596002378 SAX2

300 Zork’s Books 2003-10-05 0596005385 Office 2003 XML Essentials

10 Books of Glory 2003-10-05 0596002920 XML in a Nutshell, 2nd Edition

25 Books of Glory 2003-10-07 0596002378 SAX2

5 Books of Glory 2003-10-18 0596002378 SAX2

15 Title Wave 2003-10-21 0596002920 XML in a Nutshell. 2nd Edition

15 Books for You

Этот документ можно открыть непосредственно в Excel командой Файл → Открыть (File → Open). Откроется диалоговое окно (рис. 8.1).

Рис. 8.1. Открытие файла XML в Excel

Если вы выберете переключатель XML-список (As an XML list), то увидите предупреждение, что Excel создаст собственную схему для этого документа, не имеющего схемы (рис. 8.2).

Рис. 8.2. Предупреждение Excel об отсутствии ссылок на схему

Щелкнув кнопку ОК, вы увидите, какой способ Excel выбрал для представления информации в открываемом документе в виде электронной таблицы (рис. 8.3). Обратите внимание, что Excel ожидает встретить формат даты, который используется для элемента даты, поэтому даты, импортированные как 2003-10-05, будут отображаться как 10/5/2003.

Рис. 8.3. Данные XML, представленные как XML-список в Excel

Теперь, когда документ загружен в Excel, обрабатывать данные можно так же, как любые другие данные в Excel, — вставлять их в формулы, создавать именованные диапазоны, строить диаграммы на основе содержимого и т. д. Чтобы помочь вам, в Excel предусмотрено несколько встроенных возможностей анализа данных.

Раскрывающиеся списки в заголовках столбцов позволяют выбирать способ сортировки данных (по умолчанию данные выводятся в том порядке, в котором они записаны в исходном документе). Можно также включить отображение строки итогов Итог (Total); для этого можно воспользоваться панелью инструментов Список (List) или щелкнуть правой кнопкой мыши в любом месте списка и в контекстном меню выбрать команду Список → Строка итогов (List → Total Row). Когда строка итогов появится, выбрать вид итоговой информации можно будет в раскрывающемся меню (рис. 8.4).

Рис. 8.4. Выбор итогов для списка XML в Excel

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

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

// Листинг 8.2. Схема для данных о продаже книг

Обратите внимание, что элемент date определен как дата, а элемент ISBN определен как строка, а не как целое число. Если вы начнете с открытия этой схемы, а не документа, то заставите Excel загружать документ, сохранив ведущий нуль в ISBN.

На этот раз вы создадите список до загрузки документа XML, начав с пустого рабочего листа. Вам понадобится открыть область задач Источник XML (XML Source). Если она еще не открыта, нажмите сочетание клавиш Ctrl+Fl. Затем в раскрывающемся списке вверху области задач выберите Источник XML (XML Source) и вы увидите что-то похожее на рис. 8.6.

Рис. 8.6. Область задач Источник XML

Чтобы загрузить схему, щелкните кнопку Карты XML (XML Maps). Откроется диалоговое окно Карты XML (XML Maps) (рис. 8.7).

Рис. 8.7. Диалоговое окно Карты XML

Щелкните кнопку Добавить (Add), чтобы открыть схему, и выберите схему (рис. 8.8). Если схема не ограничивает документы одним начальным элементом, появится диалоговое окно с просьбой выбрать корневой элемент. Так как документы в этом примере начинаются с элемента sales, выберите «sales».

Рис. 8.8. Выбор XML-схемы

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

В диалоговом окне Карты XML (XML Maps) Excel сообщит, что схема была добавлена к электронной таблице. Если вы щелкнете кнопку ОК, то вернетесь в главное окно Excel и в области задач Источник XML (XML Source) появится диаграмма, отображающая структуру схемы. Теперь, когда у вас есть структура, можно создать список. Самый простой способ сделать это, особенно с небольшими документами, как наш, — перетащить значок sales на ячейку А1.

Теперь, обустроив дом для данных, нужно заселить его. Можно щелкнуть кнопку Импорт XML-данных (Import XML Data) на панели инструментов Список (List) или щелкнуть правой кнопкой мыши список и в контекстном меню выбрать кнопку XML → Импорт (XML → Import). Если вы выберете файл, который уже открывали ранее (в листинге 8.1), то увидите результат, как на рис. 8.3. Обратите внимание на добавление ведущих нулей к значениям, которые теперь являются текстовыми, как и должно быть.

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

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

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

Конвертация xls в xlsx и xml на C#

В этой статье я постараюсь рассказать об одном из возможных путей конвертации документов формата xls в xml.

Непосредственно моя задача выглядела примерно так:

Дано:

  1. 1-2 дня времени на поиск и реализацию решения
  2. Найденное решение должно быть настолько бесплатным, насколько это возможно
  3. Известна примерная структура, размер и содержание файла, которые должны быть обработаны, что снимает необходимость читать графики, диаграммы и иные медианные из документа.
  4. Использовать Interop, равно как и иные библиотеки, которые требуют установки Office нельзя, так как это создает лишнюю нагрузку на сервер и требует дополнительной установки офисного пакета.
Читайте также  Вычитание в программе Microsoft Excel

Должен заметить, эта задача отнюдь не из простых, и решить ее, также как это было сделано с новыми офисными форматами (docx и xlsx), не получится по следующим причинам:

  • Во-первых, Microsoft не предлагает каких-либо решений для чтения указанных форматов (Interopt в расчет не берем, так как его использование требует установки офисного пакета на сервере, а чтение данных из одного файлика будет сжирать необоснованно много оперативы).
  • Во-вторых, вся информация в документах xls (равно как и в doc) хранится в бинарном виде и недоступна для свободного чтения.
  • В-третьих, в интернете практически нет информации о библиотеках, которые бы решали задачу чтения информации из старых форматов excel и word, равно как и задачу преобразования старых форматов в новые.

Перерыв stackoverflow, Хабр, проконсультировавшись со старшими товарищами, а также обратившись к нижегородскому сообществу .Net разработчиков стало понятно, что наиболее верным способом решения поставленной задачи является конвертация xls в xlsx, ну а как работать с xlsx я уже знал.

Однако, нативной библиотеки от Microsoft, которая бы решала, казалось бы, столь очевидную проблему совместимости старых и новых офисных форматов, в природе не существует. Платные библиотеки требовали обоснования необходимости их покупки и, также, отдаляли момент начала их использования (на срок проведения закупочных процедур), а бесплатные решения, написанные для питона и линукса, требовали внесения существенных изменений в архитектуру проекта. И вот тут, казалось бы, самое время начинать рвать волосы из подмышек, но, как говорится, всегда найдется азиат!

Tony Qu является автором крутой библиотеки, написанной как раз для работы с офисными файлами. Изначально либа была написана для джавы, после чего портирована под .Net, правда с некоторыми ограничениями (в версии под .Net отсутствует возможность работы с документами doc).
Но, возможно, данная статья не появилась бы на свет, если бы не огромная ложка дегтя: пользователи библиотеки NPOI напрочь лишены какой-либо документации, описывающей алгоритмы ее использования. Разумеется, ничто не мешает получить персональную поддержку от разработчика, уже за материальное вознаграждение.

Поэтому, думаю, представленное ниже решение, можно использовать не только для конвертации xls в xlsx, но и в качестве небольшого примера, демонстрирующего возможности либы.

Давайте кодить

Подготовка

Как видите, основной метод конвертации работает со стримами. Не переживайте, для результата выполнения метода мы создадим обертки, которые позволят нам сохранять результат конвертации в файл (причем, как из файла, так и из потока).
За работу с файлами xls в библиотеке NPOI отвечает класс HSSFWorkbook , конструктор которого может принимать как стрим, так и путь до файла.
Наш будущий сконвертированный xlsx будет находиться в переменной типа XSSFWorkbook .
Далее запускаем цикл, в котором будет происходить копирование данных из xls в xlsx. Как мы видим, на каждой итерации цикла создаются по два объекта. Обратите внимание, что при создании объекта xssfSheet сразу же происходит копирование имени листа из объекта класса HSSFSheet .
В последствии, указанные объекты используются в качестве аргументов в функциях, копирующих стили листов и их содержимое.
Результат конвертации возвращается в виде потока типа MemoryStream

Разберем метод, отвечающий за копирование стилей

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

За копирование шрифтов отвечает метод void CopyFont(IFont toFront, IFont fontFrom)

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

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

Копирование данных из файла xls в новый файл xlsx

Перейдем к процессу копирования содержимого из файла xls в новый файл xlsx.

Логика данного метода сводится к вызову метода CopyRow(source, destination, srcRow, destRow, mergedRegions) — что происходит в нем расскажу чуть ниже. Помимо вызова указанного метода, в CopySheet происходит поиск номер последней заполненной ячейки в строке. Это необходимо для того, чтобы верно скопировать ширину каждого столбца (да, конвертация xls в xlsx предусматривает даже такой нюанс).

Разберем метод void CopyRow(HSSFSheet srcSheet, XSSFSheet destSheet, HSSFRow srcRow, XSSFRow destRow, List mergedRegions) :

Этот метод выполняет две функции:

  • Во-первых, метод копирует данные из «простых» ячеек файла с расширением xls в «простые» ячейки файла с расширением xlsx
  • Во-вторых, метод обрабатывает случаи, когда ячейка находится внутри группы объединенных ячеек. При этом, проверяется, относится ли данная ячейка к уже существующей группе объединенных ячеек, или же является первой выявленной ячейкой новой группы.

Метод копирования данных и стилей для каждой ячейки:

В этом методе происходит следующее:

  • Во-первых, копируются стили:
  • Во-вторых, копируется содержание каждой ячейки:

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

Обработка объединенных ячеек

Вернемся к обработке ячеек, включенных в группу объединенных.
Как было показано выше, за это отвечают методы CellRangeAddress GetMergedRegion(HSSFSheet sheet, int rowNum, short cellNum) и bool IsNewMergedRegion(CellRangeAddress newMergedRegion, List mergedRegions) :

Так, мы просто получаем все области объединенных ячеек для конкретного листа, после чего проверяем, входит ли наша ячейка хоть в какой-нибудь из диапазонов объединенных ячеек. Если входит, то то метод возвращает тот диапазон объединенных ячеек, к которому относится проверяемая ячейка. В противно случае, вернется null .

Указанный метод сопоставляет текущую область объединенных ячеек с той областью, к которой относится текущая ячейка, которая входит в состав нескольких объединенных ячеек. Как можно увидеть, сравнение происходит по 4-м крайним точкам каждой из областей (первая и последняя колонка, первая и последняя строчка проверяемой области).

На этом процесс преобразования xls в xlsx можно считать законченным.

С моей стороны будет свинством не сказать, что данный код был нагло сплагиачен со stackoverflow, который в свою очередь представляет собой переработанное решение по конвертации xlsx в xls, которое также лежит на stackoverflow.

Дополнительный функционал

Предлагаю добавить возможность конвертации с записью полученного результата в файл:

Также, не будем забывать, что цикл статей посвящен конвертации разных текстовых файлов в xml:

Как видите, в методе данного класса используется объект класса XlsxToXml , который реализует логику конвертации xlsx в xml, описанную в статье по этой ссылке.

С полным кодом программы Вы можете ознакомиться здесь

Конвертер файлов XLS в XML для Декларант-Алко

Конвертер, преобразующий EXCEL-файлы поставщиков алкогольных напитков и пива в XML, для загрузки в программу Декларант-Алко при подготовке деклараций №11 и №12.

Возможно, информация устарела в связи со вступлением в силу Постановления Правительства РФ от 29.12.2018 № 1719.

Предназначение конвертера XLS в XML

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

Главная цель конвертера – облегчить работу сотруднику, подготавливающему декларации №11 и №12. Его использование дает следующие преимущества:

  • исключена необходимость в монотонной работе по ручному набору строк в таблицу №2;
  • многократный рост скорости подготовки деклараций;
  • отсутствуют механические ошибки, возможные при ручном наборе.

Автор конвертера использовал его в течение 2 лет вплоть до закрытия предприятия в 2016 году, что позволяло легко отчитываться перед Росалкогольрегулированием.

Порядок работы с конвертером

Пишу программы для себя, не являюсь доверенным издателем, поэтому некоторые браузеры и антивирусы могут предупреждать об опасности перед скачиванием. Программы упакованы в обычные архивы .zip (не самораспаковывающиеся), если сомневаетесь, проверьте скачанный архив перед распаковкой антивирусом. Я использую Kaspersky Internet Security, который подтверждает, что угроз нет.

Читайте также  Расчет среднего значения в программе Microsoft Excel

Архивы с программой «Конвертер для ДА»:

Конвертер для ДА 20 — для Windows XP – Windows 7 (подойдет и к Windows 8 – Windows 10, но потребуется загрузить Microsoft .NET Framework 3.5 с пакетом обновления 1 (SP1), если он не установлен).

Конвертер для ДА 45 — для Windows 8 – Windows 10 (подойдет и к Windows 7, если установлен Microsoft .NET Framework 4.5).

Порядок работы с конвертером, преобразующем EXCEL-таблицы поставщиков в XML-файлы:

  1. Скачиваем архив с программой и распаковываем его в любую папку на жестком диске. Будут извлечены два файла: «Конвертер для ДА.exe» и «Образец файла для конвертации.xls».
  2. Таблицы, полученные от поставщиков в EXCEL-файлах, необходимо привести к стандартному виду в соответствии с образцом файла для конвертации.*
  3. Готовый файл должен быть сохранен и закрыт. При сохранении файла активным должен быть лист с приведенной к стандартному виду таблицей.
  4. Открываем файл «Конвертер для ДА.exe» и, нажав кнопку «Обзор», выбираем сохраненный файл для конвертирования. Нажимаем кнопку «Конвертировать», в результате чего создаются два файла и сохраняются в папку расположения исходного файла с именами: (имя исходного EXCEL-файла без расширения)_контрагенты.xml и (имя исходного EXCEL-файла без расширения)_документы.xml.
  5. Обновляем программу Декларант-Алко до последней версии, переходим в раздел «Проверка формата XML» и проверяем наши файлы на соответствие принятым схемам.
  6. Переходим в раздел «Контрагенты» и импортируем производителей алкоголя из файла (имя исходного EXCEL-файла без расширения)_контрагенты.xml.**
  7. Переходим в раздел «Работа с декларациями» и импортируем строки из файла (имя исходного EXCEL-файла без расширения)_документы.xml.

* В файлах поставщиков алкоголя я копирую лист с таблицей и уже в копии листа изменяю таблицу. Чтобы привести таблицы поставщиков, которые бывают самой различной структуры, к стандартному виду, надо удалить лишние строки (промежуточные и окончательные итоги, строки с безалкогольными напитками) и лишние столбцы. У некоторых поставщиков алкоголя ИНН/КПП производителей расположены в одном столбце, их нужно разделить, что можно сделать с помощью формул EXCEL. На рабочем листе в первой строке должна быть шапка таблицы с именами полей, которые необходимы для правильного расположения информации в последующих строках. Конвертер начинает считывать информацию со второй строки, с которой начинается информация по поставкам.

** В первую очередь импортируются производители алкоголя, так как, если появился новый производитель, который отсутствует в справочнике «Контрагенты», строки с ним в декларацию не загрузятся. Если у вас появился новый поставщик алкоголя, то его необходимо добавить в справочник «Контрагенты» вручную.

На что обратить внимание:
– проверить работу с XML-файлами, или какие-то другие возможности Декларант-Алко, можно в копии программы, скопировав папку «ФСРАР» и уже в копии открыв файл «Declarant-Alko.exe». Только после экспериментов не забудьте удалить копию, чтобы в будущем не перепутать ее с оригиналом;
– не забывайте про импорт остатков;
– не забывайте про возвраты;
– обязательно сверяйте объемы поступлений по печатной форме готовой декларации с данными исходных EXCEL-файлов поставщиков (я подсчитываю суммарный объем по исходным файлам поставщиков и сравниваю с общим объемом по печатной форме декларации, отдельно по поставщикам-оптовикам и отдельно по поставщикам-производителям);
– разделить ИНН/КПП производителей, расположенных в одном столбце, в EXCEL 2000-2003 можно, выбрав в меню «Данные» – «Текст по столбцам…» и далее следуя указаниям «Мастера текстов»;
– количество XML-файлов зависит от количества торговых точек («обособленных подразделений» по ФСРАР) и количества поставщиков: на одну точку с одним поставщиком отдельный файл;
– у поставщика может внезапно измениться КПП на одну цифру (было хххххххх1, стало хххххххх2, у меня такое произошло в 4 квартале 2014, обнаружил замечание ФСРАР только после сдачи отчета за 1 квартал 2015, пришлось отправить вдогонку две «корректирующие»).

Актуальность конвертера:
Автор программы сдал свой последний отчет в 2016 году, но с самого начала подачи деклараций в ФСРАР (2012 год) никаких изменений в схеме принимаемых файлов не было и, скорее всего, еще долго не будет. В любом случае, после обновления программы Декларант-Алко, проверяйте один из файлов за предыдущий квартал на соответствие формату, пункт меню в Декларант-Алко: «Проверка формата XML». Если будут в Декларант-Алко изменения, он сообщит о несоответствии файла схеме.

Производители из стран таможенного союза

В 1 квартале 2015 года у меня впервые появился белорусский производитель. Обнаружил я его, только когда XML-файл не прошел проверку в Декларант-Алко на соответствие схеме. Произошло это из-за того, что в таблице поставщика вместо ИНН и КПП был указан учетный номер иностранного производителя, и конвертер неправильно записал его в файл.
В данном случае, можно в строки с пивом от иностранного производителя вставить в соответствующие графы ИНН и КПП, скопированные в строке любого российского производителя, и немного изменить их, чтобы они не совпали в справочнике «Контрагенты», иначе иностранец не загрузится. Далее конвертируем файл, загружаем контрагентов, загружаем документы и, если загрузка пройдет успешно, в справочнике «Контрагенты» находим нового иностранного производителя, удаляем у него ИНН и КПП, выбираем «Иностр.», ставим галочку «производитель/импортер», указываем «Код Страны» и «Уч.Номер».

Если иностранный производитель уже есть в списке контрагентов, то, наверное, проще будет строки с ним удалить из стандартной таблицы, а в Декларант-Алко внести вручную. Хотя и на этот случай есть вариант действий: в справочнике «Контрагенты» снова иностранного производителя сделать «Юр. Лицом» (т.е. российской организацией), записать ИНН и КПП как в EXCEL-файле (добавленные вместо учетного номера), а после конвертации и загрузки XML-файлов снова сделать его иностранной организацией, предварительно удалив ИНН и КПП. Но, главное, еще раз все проверить по печатной форме декларации.

Кроме производителей из Беларуси, могут быть производители из Казахстана и Армении.

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

Конвертация файлов XML в форматы Excel

1 . Создайте в Excel 2007 таблицу, как показано на рис.1

Рис.1 Данные для экспорта в формат XML

2 . Перейдите на закладку РАЗРАБОТЧИК и в списках элементов управления формы выберите и разместите в левом верхнем углу таблицы элемент ActiveX КНОПКА — рис.2

Рис.2 Выбираем элемент ActiveX КНОПКА

3. Правой кнопкой мыши откройте окно СВОЙСТВА элемента и в строке Caption впишите новое наименование кнопки: Экспорт в XML — рис.3

Рис.3 Меняем наименование кнопки в окне свойств

4. Правой кнопкой мыши откройте ИСХОДНЫЙ ТЕКСТ элемента и скопируйте туда следующий код:

Private Sub CommandButton1_Click()
Dim Заголовок As Range, Данные As Range
Set Заголовок = Range(» A 1: F 1″)
Set Данные = Range([A2], Range(«A» & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)

arrHeaders = Application.Transpose(Application.Transpose(Заголовок.Value))
ПутьКФайлуXML = ThisWorkbook.Path & «result.xml»

‘ формируем DOMDocument, и сохраняем XML в файл result.xml
Array2XML(Данные.Value, arrHeaders, «Root»).Save ПутьКФайлуXML

If Err = 0 Then MsgBox «Создан XML файл» & vbNewLine & ПутьКФайлуXML, vbInformation, «Готово»
End Sub

Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
‘надо в Tools — References подключить библиотеки Microsoft HTML Object Library
‘и Microsoft XML version 3.0.
‘ получает в качестве параметров:
‘ двумерный массив arrData с данными для выгрузки,
‘ одномерный массив arrHeaders, содержащий заголовки столбцов,
‘ и strHeading$ — XML-константу объекта
Dim xmlDoc As DOMDocument, xmlFields As IXMLDOMElement, xmlField As IXMLDOMElement
Set xmlDoc = CreateObject(«Microsoft.XMLDOM») ‘ создаём новый DOMDocument

DataColumnsCount% = UBound(arrData, 2) — LBound(arrData, 2) + 1
HeadersCount% = UBound(arrHeaders) — LBound(arrHeaders) + 1
If DataColumnsCount% <> HeadersCount% Then MsgBox «Количество заголовков в массиве arrHeaders» & _
«не соответствует количеству столбцов массива», vbCritical, «Ошибка создания XML»: End

xmlDoc.LoadXML Replace(» «, » «, «_») ‘ записываем XML-константу объекта

For i = LBound(arrData) To UBound(arrData)
‘ создание нового узла
Set xmlFields = xmlDoc.DocumentElement.appendChild(xmlDoc.createElement(«Row»))

For j = LBound(arrHeaders) To UBound(arrHeaders) ‘ добавление полей в узел
Set xmlField = xmlFields.appendChild(xmlDoc.createElement(Replace(arrHeaders(j), » «, «_»)))
xmlField.Text = arrData(i, j + LBound(arrData, 2) — LBound(arrHeaders))
Next j
Next i

Set Array2XML = xmlDoc
End Function

Рис.4 Подключаем библиотеку HTML

Читайте также  Функция ДВССЫЛ в Microsoft Excel

Закройте редактор Visual Basic: File -> Close and Return to Microsoft Excel

5 . Сохраните файл в формате XLSM , поддерживающем исполнение макросов — рис. 5

Р ис. 5 Сохраняем файл с поддержкой макросов

6. Выключите РЕЖИМ КОНСТРУКТОРА и нажмите кнопку [ Экспорт в XML] — таблица Excel будет выведена в файл RESULT . XML. Откройте файл с помощью браузера IE . Содержимое файла будет представлено в виде, как на рис. 6

Рис.6. Просмотр файла XML в браузере IE

Обратите внимание на теги — внутри строки таблицы ( Row и / Row ) перечисляются строки с названиями столбцов (полей таблицы). В свою очередь, внутри строк c наименованиями столбцов содержатся значения полей таблицы.

6. Обратная конвертация файлов XML в XLS уже предусмотрена в Excel — достаточно в операционной системе правой кнопкой мыши открыть файл *.XML с помощью Excel.

Реформатор

Реформатор сервис для преобразования файлов формата xls в файлы xml-шаблоны для ФНС

Программа Реформатор производит конвертацию книг покупок и продаж, журнала учета выставленных и полученных счетов-фактур из файлов формата xls в файлы установленного формата (xml-шаблоны) из Excel для сдачи в контролирующие органы.

Конвертор преобразует данные книги покупок, книги продаж, журналы учета полученных и выставленных счетов-фактур в установленный xml формат декларации НДС.

Работает с книгами любого объема.

Системные требования: .Net Framework 3.5 и выше
Установка: Не требует инсталляции.
Функционал: Преобразует данные книги покупок, книги продаж, журналы учета полученных и выставленных сф из xls, xlsx, xlsb, csv, txt формата (csv, txt – кодировка 1251, разделитель «;») в xml формату декларации НДС.

Сколько стоит Реформатор? Прайс-лист

Стоимость программы 59 000 руб.

Внимание! Конвертор в Контур.Экстерн – бесплатная возможность, которая будет реализована во всех тарифных планах Экстерна и в Контур.Сверке.

Работает с книгами до 400 тыс. строк.

Как работать в сервисе Контур.Реформатор?

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

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

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

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

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

Отмечаем необходимый документ и загружаем его.

Каждый входной файл в первых 100 строках должен содержать «стартовую строку», каждая ячейка которой содержит номер столбца точно в соответствии с утвержденной формой документа.
Допускается деление на 2 столбца показателей, которые в форме книги объединены в один столбец (номер и дата, ИНН и КПП). При этом оба столбца должны иметь одинаковый номер в «стартовой строке».

Порядок следования таких столбцов должен соответствовать порядку именования данных в форме документа.
Если данные в «сдвоенных» столбцах книги не делятся на 2 столбца во входном файле, то в качестве разделителя таких данных допустимо использовать: пробел или символы «,» «;» ,символ «» для столбцов с ИНН-КПП.
Пример:
Книга покупок, утвержденная форма, красным выделены номера столбцов:

Настройте папку для результатов преобразования Ваших файлов.

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

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

Ошибочные данные выделены розовым цветом. Откорректировать данные можно установив курсор на подсвеченное поле.

В заключении, необходимо в основном окне программы перейти на вкладку «сверка итогов книги и доп.листа» выбрать сформированные ранее xml файлы и нажать кнопку «Сверить итоги». При формировании файла происходит пересчет итогов. Итоговые суммы выводятся после конвертации в окне проверки итоговых сумм. Если файл документа содержит строку итогов, ее значение также выдается в окне итоговых сумм для сравнения (тип строки «в файле»). В результирующий файл включаются итоговые данные по строкам и «ВСЕГО» (тип строки «расчет»).

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

При повторном запуске приложения формирование log файла начинается заново.

Конвертация файлов XML в форматы Excel

  • Поисковые системы
    • Google
    • Яндекс
    • Каталоги сайтов
    • Прочие поисковики
    • Агрегаторы и доски объявлений
  • Практика оптимизации
    • Общие вопросы оптимизации
    • Частные вопросы — ранжирование, индексация, бан
    • Сервисы и программы для работы с SE
    • Любые вопросы от новичков по оптимизации
    • Ссылочные и пользовательские факторы
    • Поисковые технологии
    • Doorways & Cloaking
  • Трафик для сайтов
    • Поисковая и контекстная реклама
    • Google Adwords
    • Яндекс.Директ
    • Тизерная и баннерная реклама
    • Общие вопросы рекламы
  • Монетизация сайтов
    • Партнерские программы в Интернете
    • Контекстная реклама
    • Google AdSense
    • Рекламная Сеть Яндекса
    • YouTube
    • Размещение тизерной и баннерной рекламы
    • Общие вопросы
  • Сайтостроение
    • Веб-строительство
    • Статистика и аналитика
    • Доменные имена
    • Администрирование серверов
    • Хостинг
    • Безопасность
    • Usability и удержание посетителей
    • Копирайтинг
  • Общение профессионалов
    • SMM
    • Семинары и конференции
    • eCommerce, интернет-магазины и электронная коммерция
    • Телефония и коммуникации для бизнеса
    • Деловые вопросы
    • Финансы
    • Cчет в Яндекс.Деньгах
    • Криптовалюты
    • Инвестиции
    • Экономика
    • Правовые вопросы
  • Биржа и продажа
    • Финансовые объявления
    • Работа на постоянной основе
    • Сайты — покупка, продажа
    • Соцсети: страницы, группы, приложения
    • Сайты без доменов
    • Трафик, тизерная и баннерная реклама
    • Продажа, оценка, регистрация доменов
    • Ссылки — обмен, покупка, продажа
    • Программы и скрипты
    • Размещение статей
    • Инфопродукты
    • Прочие цифровые товары
  • Работа и услуги для вебмастера
    • Оптимизация, продвижение и аудит
    • Ведение рекламных кампаний
    • Услуги в области SMM
    • Программирование
    • Администрирование серверов и сайтов
    • Прокси, ВПН, анонимайзеры, IP
    • Платное обучение, вебинары
    • Регистрация в каталогах
    • Копирайтинг, переводы
    • Дизайн
    • Usability: консультации и аудит
    • Изготовление сайтов
    • Наполнение сайтов
    • Прочие услуги
  • Не про работу
    • Курилка
    • Автомобили
    • Дом, сад, огород
    • Встречи и сходки
    • Железо и софт
    • Политика, экономика, управление, общество
    • Духовная пища
    • Спорт
    • Путешествия
    • Барахолка
  • Прочие
    • О сайте и форуме
    • Самое разное

Подскажите скрипт или программу для конвертации xml в xls. Чтоб на выходе получился экселевский файл. Структура полученного файла не важна, главное чтоб каждое значение в отдельной ячейке оказалось и каждый товар в отдельной строке. …если есть возможность сразу делать автозамену то хорошо, если нет то бог с ним, макросом заменять буду.

Samail, Excel 2003 открывает без проблем или Swift

Phessiv, у меня 2007, тот файл что нужно конвертировать он не открывает, пишет: ошибка разбора xml.

Samail, у меня 2003 и открывает без проблем любые xml с помощью «Открыть файл, применив следующую таблицу стилей»

Samail, возьмите любой из редакторов

скорее всего файл имеет дефекты. потом откройте его экселем.

T.R.O.N добавил 15.01.2010 в 19:12

если в структуре нет проблем и правильно определилась кодировка

T.R.O.N, спасибо попробую

Samail добавил 15.01.2010 в 22:07

Исправил ошибки, теперь открывает, но всё в столбик. Как сделать что эксель понимал, что если написано:

То это означает, что =»id» и «номер объекта» являются не значением ячейки а заголовком столбца, а значением ячейки этого столбца является «1103»?

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

satrau добавил 16.01.2010 в 04:19

Вот вам подходящий конвертер.

Сохраняем этот код в index.php прописываем в нем имя файла для парсинга и запускаем.

В результате получим csv. по нему потом правой кнопкой- открыть с помощью . Excel