LibreOffice и формирование XML

Автор Начинающий Макросер, 1 июня 2016, 11:41

0 Пользователи и 1 гость просматривают эту тему.

Начинающий Макросер

Здравствуйте, уважаемые форумчане.

Помогите пожалуйста вот с каким вопросом:

Можно ли, в Calc(или другой программе офисного пакета) формировать XML файл?

Задача:

существует таблица, в которой в колонках содержатся некоторые значения, к примеру в первом ID, во втором название, в третьем каталог(ID  папки, к которой привязан элемент)

На выходе нужно получить что то типа:
<элементы>
 <элемент>
   <ИД>ID элемента из первого столбца</ИД>
   <Название>Название элемента из второго столбца</Название>
   <Категории>
       <Категория>ID каталога из третьего столбца</Категория>
   </Категории>
 </элемент>
</элементы>

Это нужно для формирования файла, который можно было бы загрузить на сайт.
Сейчас для этого используется файл CSV(создается таблица, потом "сохранить копию" как CSV), но в последний раз макрос наработал в него 25 599 строк, по 109 ячеек каждая = файл занял 52 Мб, и сайт его не осилил =(((


Не могу сориентироваться куда копать в сторону фыгрузки XML из Calc...
Как это можно сделать???

Помогите пожалуйста, буду благодарен за любую помощь...

За ранее спасибо.

JohnSUN

Добро пожаловать на форум, Начинающий Макросер!
А не страшно, что XML будет чуток побольше, чем CSV? А он точно будет длиннее, за счет тегов...
Как варианты решения твоей задачи:
1. Продолжать выгружать в CSV. Только предварительно нарезать данные на несколько отдельных листов приемлемой длины.
2. Писать макрос, который будет разбирать строки данных и формировать текстовый XML-подобный файл
3. Воспользоваться возможностью использовать XSLT (Сервис - Параметры фильтра XML)

Первый вариант - проще всего (поскольку первоначальная работа уже проделана, осталось прикрутить небольшой костыль).
Третий вариант - правильней всего, но потребует дополнительных усилий
Второй вариант - неоднократно сделан, и каждый раз сделан не достаточно хорошо: каждый раз заточен под фиксированный набор данных и четко описанный формат (Гугль в помощь)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Начинающий Макросер

Спасибо за быстрый ответ, уважаемый JohnSUN.

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

А вот второй вариант интереснее:

Если я правильно понял, то во втором варианте, мне нужно открыть текстовый документ и записать туда "просто текст", который выглядит как XML, а потом сохранить копию как сам XML? Правильно?

Третий вариант пока трогать не буду.

Спасибо за наводку.

JohnSUN

Цитата: Начинающий Макросер от  1 июня 2016, 12:59
А вот второй вариант интереснее:

Если я правильно понял, то во втором варианте, мне нужно открыть текстовый документ и записать туда "просто текст", который выглядит как XML, а потом сохранить копию как сам XML? Правильно?
Очень похоже на окончательный вариант, но чревато неприятным глюком - первая строка XML'я у нас какая?
<?xml version="1.0" encoding="UTF-8"?>А при обычной записи в текстовый файл с помощью стандартных Open-Print мы получим, скорее всего, CP-1251. Поэтому писать придется через поток. Пример можно увидеть в стандартной библиотеке Tools, в модуле UCB, процедура называется SaveDataToFile(). Тогда всё должно работать согласованно (имею в виду кодовые страницы)
Цитата: Начинающий Макросер от  1 июня 2016, 12:59
Третий вариант пока трогать не буду.
А может быть и зря! Там, вообще-то, не очень сложно. Вот инструкция
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Начинающий Макросер

Спасибо что указали на этот нюанс, по сайту, там кодировка Windows CP-1251.

Выгрузил катаог товаров через XML, что бы использовать как шаблон, там первая строчка такая:
<?xml version="1.0" encoding="windows-1251"?>

В этом случае тоже черз поток лучше?

JohnSUN

А как раз в этом случае через поток хуже  >:(
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне