powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Генерация XML-Excel файлов
49 сообщений из 49, показаны все 2 страниц
Генерация XML-Excel файлов
    #37017466
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому-то интересно, пакет создания XML-Excel файлов.
Функционал пока только базовый.
Пример работы в методе Excel.Document.Test.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37017924
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

класса для тестирования нет в наличии
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37018450
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d ##class(Excel.Document).Test()
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37018457
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там только путь указывается напрямую, поправьте в исходниках метода.
В принципе, это практически необкатаный класс, но если есть интерес, могу доработать.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37019686
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще сейчас разрабатываю ту же фигню для ворда.
Но там у самого ворда более сложная структура, классов в полтора раза больше получается и как-то более говнокодисто все.

Здесь по сути вся идея в том, чтобы построить дерево объектов, которое при выгрузке в XML становится сразу готорым документом.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37019701
Фотография barl_alibek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

очень интересная работа, в итоге может получится очень даже интересная вещь
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37019825
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. , я заинтригован.
У тебя есть исходное описани этой xml-структуры? По Экселю и по Ворду? Интересно было бы почитать на русском если есть...
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37020072
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неа. Беру файл вордовый или экселевский и сохраняю его как XML, дальше смотрю текстовый файл.
И по его структуре дорисовываю классы :-)
Там правда много необязательных атрибутов и тегов, иногда вообще непонятных.

В ворде научился устанавливать параграфы, устанавливать интервал строк, ставить позиции табуляции, менять шрифт текста, атрибуты(подчеркнутый, жирный), выравнивание, работать с колонтитулами (пока только с верхним), ставить разрывы страниц, вставлять картинки.
Пока еще не сделал работу с таблицами.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37020158
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

+1
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021145
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, этож стандарт Office Open XML от мелкомягких - всего 6000 страничек :). Будет работать начиная с офиса 2003 (если поставить вот это ). Есть еще Open Document Format , но будет открываться с MS Office 2007 SP2. И то (.docx, .xlsx) и другое (.odt,.ods) - обычные zip архивы каталогов с xml файлами. Литературы много, но все на english. Проще делать как Александр, создать шаблон и посмотреть что к чему.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021154
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно формировать не только данные, но и графики-диаграммы, например ;)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021637
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот с графиками-диаграммами облом, с рисунками в экселе тоже труба - при сохранении он просто из файла все это убирает.

В ворде картинки можно.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021651
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintЛитературы много, но все на english.
Вот ведь...

doublefintПроще делать как Александр, создать шаблон и посмотреть что к чему.
Дык устал уже методом тыка...
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021754
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. Вот с графиками-диаграммами облом Сделайте шаблон в Excel - 1 лист с данными, 2 лист - вставьте диаграмму на основе данных из первого листа. Сохраните в формате xlsx или OpenDocument. Откройте zip-ом ищите файл chart.xml для xlsx ( или Object 1\content.xml для OpenDocument). Там будут привязки к ячейкам данных. Сформировать такое же достаточно легко.

OpenDocument более понятный, все подробно расписано в тегах, но более избыточный. Office OpenXML - труднее соориентироваться что к чему, есть особенности вроде shared и inline строк, но формировать удобнее.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021783
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В экселе все достаточно просто.
По крайней мере у нас был генератор на уровне 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>.
В общем, с вордом пока сумбур :-)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021797
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

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

Shared и inline строки даж не знаю что такое. Стыдно должно быть, да? :-)
У нас просто достаточно простые потребности к генерации экселевских листов - это просто данные, как-то минимальным образом отформатированные.
А вот на в ворде они отрываются, приходится делать типа "красиво".
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021861
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,
Office OpenXML, OpenDocument - относительно новые форматы, у нас просто красоту запросили, пришлось присмотреться.

Shared строки - своеобразная оптимизация данных для формата OpenXML. Создается "индексный" файл sharedStrings.xml в который помещаются все текстовые значения из книги. При заполнении конкретной ячейки указывают индекс из sharedStrings. Все это жутко неудобно, народ это дело пытается через XSLT заполнять - вешаются. Мало кто знает, что можно указывать текстовые значения сразу - inline. Пример строки в Office OpenXML c числом и инлайн-строкой :
Код: plaintext
1.
2.
3.
4.
5.
6.
<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 приходится прописывать в аттрибутах тегов, особенно ячеек таблиц.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021908
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том XML, в котором я работаю - работает вот так:
<Row ss:AutoFitHeight="1">
<Cell><Data ss:Type="String">Hello World</Data></Cell>
</Row>
Ваш пример в моем документе не отобразился, видимо разные форматы.

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

А в чем смысл inline и shared string? Так как мы делаем - гораздо проще (хотя это формат другой, тут наверно нельзя сравнивать.)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021925
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., пример и не отобразится, так как это только часть файла из архива (.xslx). Приведен на случай, если кто-нить заинтересуется форматом.

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

Смысл sharedStrings.xml - позволяет Microsoft говорить что у них самый компактный (размер итоговых файлов) xml формат для офисных документов :)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37021949
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял, что это часть, я просто попытался в свой файл затолкать, естественно, ничего из этого не вышло :-)

До графиков мы своих еще не распустили.
Я страшные глаза делаю, когда надо картинки вставить :-)
А у вас какой способ генерации файлов, в общих чертах?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023261
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., создаем файл Excel (xlsx или ods), распаковываем его (для использования в качестве шаблона), на csp-странице получаем параметры запроса, делаем копию шаблона, дописываем данные в файлы.xml копии шаблона, пакуем zip-ом, выдаем на странице. Формирование собственно файла xml, как и предлагал - глобал и команда w (при условии что в данных не будет <> ;)).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
///Создает файл с основными данными
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
}
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023670
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пойти по пути шаблонов я пробовал для отправки писем, правда шаблон хранил на диске.
Первый пример стал последним - слишком мало гибкости, в шаблон как переменную приходитось вставлять целые таблицы, а это не айс.

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

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

А zip вы через $zf запускаете? Или есть алгоритмы сжатия данных в потоках каше?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023691
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.А zip вы через $zf запускаете? Или есть алгоритмы сжатия данных в потоках каше?
Методы: %SYSTEM.Util.Compress(), %SYSTEM.Util.Decompress()
Классы: %Stream.GblBinCompress, %Stream.GblChrCompress

PS: я тоже думал когда-то об использовании XML для генерации Excel-отчётов, но потом отказался из-за ограничений, которые здесь упоминаются.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023733
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока не понял, что за алгоритм сжатия у них. Но вроде не zip?

А какие ограничения xml формата для вас критичны?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023801
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,
у вас там в Минске что-то серьезное творится?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023819
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Пока не понял, что за алгоритм сжатия у них. Но вроде не zip?
В документации к методам указан используемый алгоритм .

Блок А.Н.А какие ограничения xml формата для вас критичны?
Всё то, к чему привык пользователь: ЭЦП, шифрация данных, графики, изображения и т.п.
Для разработчика: поддержка Excel с версии 97, функции постобработки типа AutoFit , документируемость SDK.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023839
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я человек темный, zlib это же еще не совсем zip?

А какой метод генерации используете? Activate?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023857
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.zlib это же еще не совсем zip? Zlib

Zip
Блок А.Н.А какой метод генерации используете? Activate? Ни в коем случае . Не нужно забывать про ActiveX и x64.

PS: спасибо за поддержку, особенно за марсианские яблони и ви... Впрочем, нет. Только за яблони.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023937
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По zip надо подумать, похоже zlib это какая-то заготовка к нему, про те же заголовки нефига непонятно. Если всерьез займусь xlsx - а повод к этому есть, хотя бы претензия на маленький размер, если у нас тут файлы по 200Мб, которые через веб передаются.

Про яблони - так это нам нужно спасибо сказать вам.
Вы единственный, кого я замечаю борющимся за каше на чужом поле. Обычно я избегаю встревать в такие дискуссии, но тут что-то зацепило.
Еще мне кажется, что мы призы с krvsa(сорри) незаслуженно получили, особенно если с вами сравнивать, хотя это фигня, конечно.
И русский отдел маркетинга ИС зря получает свою зарплату, если он вообще есть.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37024098
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., Шаблон хранится на диске, сжимаем через $zf, читаем и отправляем через csp.
Блок А.Н.В любом случае, напрямую через теги это сильно страшно, ошибиться же легко? Если честно, не понял почему. Сделали базовый интерфейс и больше про теги никто не вспоминает, на вход передать глобал определенной структуры...
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37024259
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А там шрифты-границы, и всякие объединения ячеек через глобал удобно передавать?
Или не используете?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37024294
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., не могу вспонить ситуацию, когда что-то нельзя передать через глобал... :)
Код: plaintext
1.
2.
s @gl@("row",row,"c",cell,"class")="myclass"
s @gl@("merges", 1 ,"ref")="A$1:B$1"
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37190597
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,

Приветствую!
если есть возможность, можете описать или скинуть что нить такое, что бы понять как именно нужно работать из Cache с файлами MS Office Excel 2007. Ну очень заинтересовала эта темка. Особенно интересует часть про разархивирование и архивирование

Заранее спасибо
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37192198
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007, постараюсь выложить пример в ближайшее время.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37192499
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint, ок буду ждать
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37211604
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет ты про меня не забыл?

doublefint
Код: plaintext
1.
2.
3.
4.
5.
<row>
        <c t="inlineStr">
		<is><t>Привет мир!</t></is>
	</c>
</row>
с - column или cell, @t - type, v - value, is - inline string, t - text

Такое формирование данных - это файл sheet1.xml верно?
я написал так:
Код: plaintext
1.
2.
3.
<sheetData>
 <row r="4"><c r="B4" t="inlineStr"><is><t>Привет мир!</t></is></row>
</sheetData>
выдал ошибку:
Код: plaintext
1.
<removedPart>Замененный компонент: часть /xl/worksheets/sheet1.xml с ошибкой XML. Недопустимый знак xml. Строка  2 , столбец  571 .</removedPart>

с чем это связано? не подскажешь?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37211688
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я написал так:
Код: plaintext
1.
2.
3.
<sheetData>
 <row r="4"><c r="B4" t="inlineStr"><is><t>Привет мир!</t></is></c></row>
</sheetData>
забыл тег закрыть </c>
)))
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37213271
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007, не забыл. Были проблемы (переезжали с 2008 на 2010 ;), был сильно занят, прошу прощения.
Собственно, сам пример (сильно упрощенный):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
/// Сложная страница, которая сформирует новые xml данные, 
/// запакует их в формат xls, 
/// отдаст пользователю
Class csp.out Extends %CSP.Page {

/// подменим на excel
Parameter CONTENTTYPE = "application/excel";

///Parameter CHARSET не определен, так как будем отдавать Excel


/// "text/html";
/// Пишет файл с данными
/// см. исходный файл : template\xl\worksheets\sheet1.xml
ClassMethod wSheet1() 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">>
     ;<dimension ref="A1:D2"/> - вывод этой строки подавляем, так как данных у нас будет больше
     &html<<sheetViews>
      <sheetView workbookViewId="0">
      <pane xSplit="2" ySplit="1" topLeftCell="C2" activePane="bottomRight" state="frozenSplit"/>
      <selection pane="bottomLeft" activeCell="A2" sqref="A2"/>
      <selection pane="topRight" activeCell="C1" sqref="C1"/>
      <selection pane="bottomRight" activeCell="C2" sqref="C2"/>
     </sheetView>
     </sheetViews>
     <sheetFormatPr defaultRowHeight="12.75"/>
     <cols>
      <col min="1" max="1" width="10" customWidth="1"/>
      <col min="2" max="2" width="8.7109375" customWidth="1"/>
      <col min="3" max="3" width="19.42578125" customWidth="1"/>
      <col min="4" max="4" width="14.28515625" customWidth="1"/>
     </cols>
     <sheetData>>
      
      ;Обратите внимание на описание заголовков колонок 
      ;вместо строковых значений - ссылки справочник в файле sharedStrings.xml
      
      &html<<row r="1" spans="1:4" ht="15.75" thickBot="1">
       <c r="A1" s="1" t="s"><v> 0 </v></c>
       <c r="B1" s="1" t="s"><v> 1 </v></c>
       <c r="C1" s="1" t="s"><v> 2 </v></c>
       <c r="D1" s="1" t="s"><v> 3 </v></c>
      </row>>
      
      /******ДИНАМИЧЕСКАЯ ЧАСТЬ ОТЧЕТА**************/
      d ##class(test.data).%KillExtent() ;каждый раз разный отчет
      d ##class(test.data).Populate( 1000 )
      &sql(Declare rs Cursor For
       Select code,name,amount Into :code,:name,:amount
       From test.data
      ) &sql(Open rs)
      s i= 0 
      for { &sql(Fetch rs) q:SQLCODE
       s i=i+ 1  &html<<row><c><v>#(i)#</v></c>> ;числовые данные отдаем сразу
       
       ;текстовые значения пакуем в инлайн-стринг 
       &html<
            <c t="inlineStr"><is><t>#(code)#</t></is></c>
            <c t="inlineStr"><is><t>#(name)#</t></is></c>
       > 
       ;опять числовые
       &html<<c><v>#(amount)#</v></c>
       </row>>
       
      } &sql(Close rs)
      
    ;дальше снова просто копия из файла шаблона  
    &html<</sheetData>
    <autoFilter ref="A1:D2"/>
     <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
     <pageSetup paperSize="9" orientation="portrait" horizontalDpi="300" verticalDpi="300" r:id="rId1"/>
     </worksheet>
 >
}

/// Перед тем как отдать файл 
/// копируем каталог шаблона во временный каталог
/// в каталог генерим новый файл со своими данными
/// зипуем каталог в файл, выдаем на странице
ClassMethod OnPage() As %Status
{
 ;Определяем абсолютные пути
 s cspPath=$system.CSP.GetFileName(%request.URL) ;csp-приложение
 
 #define FILE ##class(%File)
 s appPath=$$$FILE.GetDirectory(cspPath) ;по нему определили каталог
 s templatePath=appPath_"\Template\" ;предопределенное положение шаблона
  
 ;создаем случайный каталог для отчета
 s ext="xlsx"
 s tempFile=$$$FILE.TempFilename("xlsx") ;будущий архив
 s tempDir=$$$FILE.GetDirectory(tempFile) ;абсолютный путь к временному каталогу
 s var=$$$FILE.GetFilename(tempFile) ;нужна только "случайная" часть от имени временного файла
 s var=$p(var,"."_ext)
 s tempDir=tempDir_var ;абсолютный путь к временному каталогу нового отчета
 
 ;копируем файлы шаблона
 d $$$FILE.CopyDir(templatePath,tempDir, 1 , 1 , 1 ) ;надо бы проверить
 
 ;файл с новыми данными 
 s dataFile=tempDir_"\xl\worksheets\sheet1.xml" ;предопределенное положение файла с данными (см. стандарт)
 ;записываем его 
 open dataFile:"WNUK\UTF8\" ;Открываем для записи - проверить
 use dataFile d ..wSheet1()
 close dataFile
 
 ;архивируем результат
 s zipper=appPath_"zipper\pkzipc.exe" ;путь к архиватору
 s cmd=zipper_" -add -move -attr=all -dir -path=relative -nozip "_tempFile_" "_tempDir_"\*.*"
 ;w "cmd: ",cmd
 d $zf(- 1 ,cmd) ;мне повезет!
 
 ;отдаем на страницу
 s file=$$$FILE.%New(tempFile)
 d file.Open("RU:/TRANSLATE=0")
 d file.OutputToDevice()
 d file.Close() k file
 
 Q $$$OK
}

ClassMethod OnPreHTTP() As %Boolean [ ServerOnly =  1  ] {
 s %response.ContentType = "application/excel"
 d %response.SetHeader("content-disposition","attachment; filename=Report.xlsx")
 Q  1 
}
}

И он же в виде проекта (см. приложение)
Тестировалось на WinXP, MS Office2007, Cache 2010.2.3 UTF8 (область USER, csp приложение \csp\user)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37213272
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размер приложений ограничен, не смог добавить сам упаковщик
Это файл pkzipc.exe (брал из комплекта FAR-managera), его надо поместить в каталог: csp\user\zipper
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37213726
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,

Спасибо большое, есть что почерпнуть
я тут вот еще что выяснил про передачу string:
Код: plaintext
1.
2.
3.
4.
5.
<row r="1">
 <c r="B1" t="str">
  <v>TTTT</v>
 </c>
</row>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
XSD Schema Code: 
<xsd:simpleType name="ST_CellType">
    <xsd:annotation>
        <xsd:documentation>Cell Type</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="b">
            <xsd:annotation>
                <xsd:documentation>Boolean</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="n">
            <xsd:annotation>
                <xsd:documentation>Number</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="e">
            <xsd:annotation>
                <xsd:documentation>Error</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="s">
            <xsd:annotation>
                <xsd:documentation>Shared String</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="str">
            <xsd:annotation>
                <xsd:documentation>String</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="inlineStr">
            <xsd:annotation>
                <xsd:documentation>Inline String</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
    </xsd:restriction>
</xsd:simpleType>
http://schemas.liquid-technologies.com/OfficeOpenXML/2006/
search/"inlineStr"
и вот еще что, я тут тоже задумался над таким формированием отчетов
есть уже некий пакет классов, который позволяет формировать пока только стандартный пустой документ Excel2007 с помощью %XML.Adapter, работаю над передачей данных и формированием ссылочной целостности стилей
если нитересует тоже могу скинуть поделиться
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37214163
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007, спасибо, буду знать. Мне идея с шаблонами нравится из-за возможности быстро разработать его с помощью визуальных средств (Excel, Word) и хранения кучи разметки вне базы данных.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37562642
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь создание больших файлов.
Генератор не выжирает память процесса, так как ячейки переделал на хранимые объекты в глобале процесса.
Стало немножко медленнее, так как теперь при обращении объекты открываются/закрываются.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37564591
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, под каше 2011 не работает.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Генерация XML-Excel файлов
    #38594728
DragonVDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вклинюсь в обсуждение со своей проблемой http://www.sql.ru/forum/1084615/oracle-to-excel

на сколько я понимаю изложенными вами способом можно реализовать часть того что мне нужно
1. по размеченным диапазонам Excel вставка данных: результат может быть из запроса или текст, изображение (не обязательно из БД)
2. соблюдение всех начальных форматирований в шаблоне (размещение на листе тескольких диапазонов, в том числе рядом)
3. !контроль завершения процесса Excel.exe по окончании процесса!
4. способы добавления форматирования внутри данных, например: выделение цветом, зачеркивание, курсив для отдельных слов в ячейках и т.д.
5. авто нумерация страниц
6. создание авто содержания
7. группировки текста внутри диапазонов (в том числе не одинаковых данных, т.е. объединение по заранее заданному кол-ву ячеек)
8. формирование отчета должно быть приемлемо по скорости ("ненамного" превышать отработку запросов)


есть ли какие то видимые проблемы, которые не получится сделать? и на сколько корректно править шаблон Excel руками?

очень интересует нумерация страниц и форматирование данных внутри одной ячейки
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #38616780
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DragonVDA,

У меня генерация файла с нуля, впрочем, на мой взгляд, довольно простой интерфейс, для меня проблем не составляет.
С шаблонами я не работаю, уже существующий файл открыть не смогу, установленный эксель для создания файла не нужен.
Формат xml-excel, как он называется точно, я не знаю. Он выглядит как эксель и имеет многие возможности экселя, но не все.
В частности, нельзя вставить картинки, сводные таблицы, скрипты.
Форматирование ячеек есть, объединение, установка размеров тоже. С границами мне лень было разбираться, что-то есть, но не особо много, но доработать проблем не будет. Для отдельных слов в ячейке форматирование нельзя установить.
Генерация файла намного дольше выборки данных (но выборка данных обычно вообще ничтожна по времени), но в принципе сравнима с другими способами формирования отчетов по скорости, так что приемлимо.

Текущая версия в этой ветке слегка багнутая, но так как особо никто интереса не проявил, я более свежие не выкладывал.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #38616781
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, генерация заточена чисто под каше.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Генерация XML-Excel файлов
    #39487205
Charlie2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Текущая версия в этой ветке слегка багнутая, но так как особо никто интереса не проявил, я более свежие не выкладывал.
Есть интерес! Если вы ещё не забросили, поделитесь, пожалуйста. :-)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #39487268
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charlie2017,

Я больше в той организации не работаю, а выносить код (хоть и написанный собой) посчитал неэтичным, да и правила той организации это прямо запрещают. Так что сейчас у меня ничего нет, а мои коллеги, насколько я в курсе, на этот форум не заходят.
Есть своя ветка этой разработки у ребят из СибЭКО, некоторые форум этот читают. Возможно, поделятся.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #39490195
drakut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Charlie2017,

Попробуйте для работы с XLSX-файлами использовать вариант из моего поста: http://www.sql.ru/forum/1262232/namerennoe-ignorirovanie-tegov-pri-correlate-i-next-klassa-xml-reader - сможете распарсить файл любой структуры, так как вы уже будуте обращаться с файлом как с набором объектов, а это гораздо удобнее. Плюс сэкономите время на изобретение своих классов. Пока единственная проблема, с которой я столкнолся и не решил - парсинг больших файлов, по 10-15 мб (пока резал файл на приемлемые сторонним инструментом)
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Генерация XML-Excel файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]