Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Если кому-то интересно, пакет создания XML-Excel файлов.
Функционал пока только базовый.
Пример работы в методе Excel.Document.Test.

К сообщению приложен файл (Excel.rar - 5Kb) cкачать
16 дек 10, 09:45    [9946539]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Ymka2007
Member

Откуда:
Сообщений: 884
Блок А.Н.,

класса для тестирования нет в наличии
16 дек 10, 12:14    [9947860]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
d ##class(Excel.Document).Test()
16 дек 10, 14:53    [9949255]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Там только путь указывается напрямую, поправьте в исходниках метода.
В принципе, это практически необкатаный класс, но если есть интерес, могу доработать.
16 дек 10, 14:55    [9949271]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Еще сейчас разрабатываю ту же фигню для ворда.
Но там у самого ворда более сложная структура, классов в полтора раза больше получается и как-то более говнокодисто все.

Здесь по сути вся идея в том, чтобы построить дерево объектов, которое при выгрузке в XML становится сразу готорым документом.
17 дек 10, 06:07    [9952928]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
barl_alibek
Member

Откуда: Астана
Сообщений: 100
Блок А.Н.,

очень интересная работа, в итоге может получится очень даже интересная вещь
17 дек 10, 06:56    [9952958]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 12894
Блок А.Н., я заинтригован.
У тебя есть исходное описани этой xml-структуры? По Экселю и по Ворду? Интересно было бы почитать на русском если есть...
17 дек 10, 09:40    [9953425]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Неа. Беру файл вордовый или экселевский и сохраняю его как XML, дальше смотрю текстовый файл.
И по его структуре дорисовываю классы :-)
Там правда много необязательных атрибутов и тегов, иногда вообще непонятных.

В ворде научился устанавливать параграфы, устанавливать интервал строк, ставить позиции табуляции, менять шрифт текста, атрибуты(подчеркнутый, жирный), выравнивание, работать с колонтитулами (пока только с верхним), ставить разрывы страниц, вставлять картинки.
Пока еще не сделал работу с таблицами.
17 дек 10, 11:06    [9954097]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Ymka2007
Member

Откуда:
Сообщений: 884
krvsa,

+1
17 дек 10, 11:30    [9954308]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 763
krvsa, этож стандарт Office Open XML от мелкомягких - всего 6000 страничек :). Будет работать начиная с офиса 2003 (если поставить вот это). Есть еще Open Document Format, но будет открываться с MS Office 2007 SP2. И то (.docx, .xlsx) и другое (.odt,.ods) - обычные zip архивы каталогов с xml файлами. Литературы много, но все на english. Проще делать как Александр, создать шаблон и посмотреть что к чему.
17 дек 10, 16:10    [9957329]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 763
Можно формировать не только данные, но и графики-диаграммы, например ;)
17 дек 10, 16:14    [9957362]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Вот с графиками-диаграммами облом, с рисунками в экселе тоже труба - при сохранении он просто из файла все это убирает.

В ворде картинки можно.
17 дек 10, 19:02    [9958519]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 12894
doublefint
Литературы много, но все на english.

Вот ведь...

doublefint
Проще делать как Александр, создать шаблон и посмотреть что к чему.

Дык устал уже методом тыка...
17 дек 10, 19:13    [9958550]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 763
Блок А.Н.
Вот с графиками-диаграммами облом
Сделайте шаблон в Excel - 1 лист с данными, 2 лист - вставьте диаграмму на основе данных из первого листа. Сохраните в формате xlsx или OpenDocument. Откройте zip-ом ищите файл chart.xml для xlsx ( или Object 1\content.xml для OpenDocument). Там будут привязки к ячейкам данных. Сформировать такое же достаточно легко.

OpenDocument более понятный, все подробно расписано в тегах, но более избыточный. Office OpenXML - труднее соориентироваться что к чему, есть особенности вроде shared и inline строк, но формировать удобнее.
17 дек 10, 19:57    [9958754]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
В экселе все достаточно просто.
По крайней мере у нас был генератор на уровне OpenRow-CloseRow, но при работе с ним часто программист ошибался и объединенные ячейки пересекались (и другие ошибки тоже были). Эксель говорил "уупс" и файл не открывал. Поэтому я и решил сделать генератор на уровне объектов - тут можно прикрутить валидацию. Получилось достаточно просто.

С вордом все иначе.
Во-первых, он для меня новый,
во-вторых, структура у него значительно сложнее,
в-третьих структура у него менее фиксированная.
например, в теге <w:r></w:r> может содержаться и текст, и табуляция, и перевод строки и разрыв страницы, и картинка. Но хуже, что это все может содержаться все вместе и причем вперемежку.
Ладно, тут я решил для себя, что в этом теге держим только что-то одно, и при каждом шевелении открываем новый. Так работает по-крайней мере, но на каждый тег <w:r> приходится выставлять шрифт и его атрибуты. Для программиста это процесс можно скрыть интерфейсом, но файл немножко распухнет. Фиг с ним, 30кб или 80кб не такая большая разница.
Тут еще выяснилось, что в теге <w:sect> могут быть как параграфы <w:p>, так и таблицы <w:tbl>.
Как сэмулировать последовательность <w:p><w:p/><w:tbl></w:tbl><w:p><w:p/> мне пока непонятно
Попробовал запихать <w:tbl> внутрь <w:p> - вроде работает. Но при этом внутри каждой ячейки таблицы тоже есть параграф <w:p>.
В общем, с вордом пока сумбур :-)
17 дек 10, 20:14    [9958819]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
doublefint,

В экселе я делал именно по известной мне уже схеме, т.е. я просто переписал генератор тот, что уже был. И так получилось, что это был формат не xlsx :-)

Shared и inline строки даж не знаю что такое. Стыдно должно быть, да? :-)
У нас просто достаточно простые потребности к генерации экселевских листов - это просто данные, как-то минимальным образом отформатированные.
А вот на в ворде они отрываются, приходится делать типа "красиво".
17 дек 10, 20:23    [9958848]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 763
Блок А.Н.,
Office OpenXML, OpenDocument - относительно новые форматы, у нас просто красоту запросили, пришлось присмотреться.

Shared строки - своеобразная оптимизация данных для формата OpenXML. Создается "индексный" файл sharedStrings.xml в который помещаются все текстовые значения из книги. При заполнении конкретной ячейки указывают индекс из sharedStrings. Все это жутко неудобно, народ это дело пытается через XSLT заполнять - вешаются. Мало кто знает, что можно указывать текстовые значения сразу - inline. Пример строки в Office OpenXML c числом и инлайн-строкой :
<row>
        <c><v>2010</v></c>
        <c t="inlineStr">
		<is><t>Привет мир!</t></is>
	</c>
</row>
с - column или cell, @t - type, v - value, is - inline string, t - text

Word отлично кушает обычный html, только сменить заголовок Content-type у csp-страницы. Схема та же - создали нужный файл в Worde, сохранили как web-страницу, открываем блокнотом и учимся. Из особенностей - часть css приходится прописывать в аттрибутах тегов, особенно ячеек таблиц.
17 дек 10, 21:04    [9959011]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
В том XML, в котором я работаю - работает вот так:
<Row ss:AutoFitHeight="1">
<Cell><Data ss:Type="String">Hello World</Data></Cell>
</Row>
Ваш пример в моем документе не отобразился, видимо разные форматы.

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

А в чем смысл inline и shared string? Так как мы делаем - гораздо проще (хотя это формат другой, тут наверно нельзя сравнивать.)
17 дек 10, 21:45    [9959186]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 763
Блок А.Н., пример и не отобразится, так как это только часть файла из архива (.xslx). Приведен на случай, если кто-нить заинтересуется форматом.

Большинство проблем со стилями для word-html мы успешно забороли, с кодировкой проблем тоже нет. Но пользователь захотел Excel и обязательно с графиками.

Смысл sharedStrings.xml - позволяет Microsoft говорить что у них самый компактный (размер итоговых файлов) xml формат для офисных документов :)
17 дек 10, 22:07    [9959258]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Я понял, что это часть, я просто попытался в свой файл затолкать, естественно, ничего из этого не вышло :-)

До графиков мы своих еще не распустили.
Я страшные глаза делаю, когда надо картинки вставить :-)
А у вас какой способ генерации файлов, в общих чертах?
17 дек 10, 22:46    [9959381]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 763
Блок А.Н., создаем файл Excel (xlsx или ods), распаковываем его (для использования в качестве шаблона), на csp-странице получаем параметры запроса, делаем копию шаблона, дописываем данные в файлы.xml копии шаблона, пакуем zip-ом, выдаем на странице. Формирование собственно файла xml, как и предлагал - глобал и команда w (при условии что в данных не будет <> ;)).
///Создает файл с основными данными
ClassMethod wDataSheet(gln as %String) {
 &html<<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheetData>>
	s row="" f { s row=$o(@gln@("row",row)) q:row=""
		w !,"<row>"
		s cell="" f { s cell=$o(@gln@("row",row,"c",cell)) q:cell=""
			s t=$d(@gln@("row",row,"c",cell,"t")) ;type
			s v=$g(@gln@("row",row,"c",cell,"v")) ;value
			w "<c ",$s(t:"t=""inlineStr""",1:""),">"
			w:'t "<v>",v,"</v>"
			w:t "<is><t>",v,"</t></is>"
			w "</c>"
		}
 		w "</row>"
	}
 &html<</sheetData></worksheet>>
 Q
}
19 дек 10, 14:07    [9963007]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Пойти по пути шаблонов я пробовал для отправки писем, правда шаблон хранил на диске.
Первый пример стал последним - слишком мало гибкости, в шаблон как переменную приходитось вставлять целые таблицы, а это не айс.

Затолкать готовый файл прямо в CSP-шку мне как-то даже в голову не пришло :-)
В любом случае, напрямую через теги это сильно страшно, ошибиться же легко?

Надо со своим способом мне попробовать xlsx сделать, а то в том формате XML, в котором мы работает, даже картинки нельзя вставлять. Графики очень интересно делать сразу в отчетах.

А zip вы через $zf запускаете? Или есть алгоритмы сжатия данных в потоках каше?
19 дек 10, 21:34    [9963731]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3079
Блог
Блок А.Н.
А zip вы через $zf запускаете? Или есть алгоритмы сжатия данных в потоках каше?

Методы: %SYSTEM.Util.Compress(), %SYSTEM.Util.Decompress()
Классы: %Stream.GblBinCompress, %Stream.GblChrCompress

PS: я тоже думал когда-то об использовании XML для генерации Excel-отчётов, но потом отказался из-за ограничений, которые здесь упоминаются.
19 дек 10, 21:57    [9963765]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
Пока не понял, что за алгоритм сжатия у них. Но вроде не zip?

А какие ограничения xml формата для вас критичны?
19 дек 10, 22:30    [9963844]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3542
doublefint,
у вас там в Минске что-то серьезное творится?
19 дек 10, 23:38    [9964009]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить