Re[3]: Генерация репорта в excel формате. С чего начать?
От: ie Россия http://ziez.blogspot.com/
Дата: 22.12.04 03:12
Оценка:
Здравствуйте, Fagim, Вы писали:

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


Если можно маленький примерчик...
... << RSDN@Home 1.1.4 beta 2 >>
Превратим окружающую нас среду в воскресенье.
Re[3]: Генерация репорта в excel формате. С чего начать?
От: Аноним  
Дата: 22.12.04 04:36
Оценка:
С примерчиком тяжеловато, так как делать проект специально для форума времени как-то нет, да еще ведь и данные надо прикладывать...

Но суть такая:
1)Заводиться XSLT — модуль, в котором в именованные шаблоны загнаны всякие здоровые, но маломеняющиеся элементы типа свойств документа (параметризованный шаблон), таблица стилей, определения форматов списков и т.п.
2)Заводится модуль, обволакивающий основные процедуры генерации таблиц — вывод строк, ячеек, их мержинг и т.п, можно и без этого модуля, но тогда все ячейки придется прямо прописовать в Spread..ML, что труднее читается
3)Еще какие-то утилитные модули (о скриптами, вызовом хитрых шаблонов через msxsl:node-set и т.п. — кстати запомните, если в трансформации А определена переменная или шаблон X, и А импортирует в себя Б, то для вызова шаблона или переменной X из Б, Б не должна импортировать А, импорты нельзя делать рекурсивно, да это и не надо, так как загрузчик СНАЧАЛА грузит ВСЕ трансформации в одну общую здоровую, а потом только смотрит где какие имена, так что спокойно можно писать типа <xsl:call-template name="some_name" select="$some_var"/> не заботясь о том, чтобы в этом конкретном файле была реализация шаблона и переменной — так на XSLT можно реализовывать полиморфизм, наследование, делегировние и аггрегацию, т.е. ООП

4) В итоге получаем возможность писать очень компактный и читабельный XSLT уже именно под требуемый отчет типа:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns:my="urn:my.report"/>
<xsl:import href="excel.system.xslt"/>
<xsl:import href="excel.table.output.xslt"/>
<xsl:import href="my_report.private.utilities.xslt"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<my:headers>
<item>№</item>
<item>Название</item>
<item>Кол-во</item>
</my:headers>


<xsl:variable name="headers" select="document('')//my:headers/item"/>
<xsl:template match="/">

<xsl:text disable-output-escaping="yes"><?mso-application progid="Excel.Sheet"?></xsl:text><!--в .NET xsl:processing-instruction не отрабатывает адекватно-->
<s:Workbook>
<xsl:call-template name="_doc_props"/>
<xsl:call-template name="_styles"/>
<xsl:call-template name="_names"/>
<s:Worksheet>
<s:Table>
<!--типа генерим в 5-й строке зголовки таблицы (с нужным стилем), сам шаблон расположен например в импортированном excel.table.output.xslt -->
<xsl:call-template name="generate_row">

<xsl:with-param name="items" select="$headers"/>
<xsl:with-param name="row_index" select="5"/>
<xsl:with-param name="style" select="my_header_1"/>
</xsl:call-template>
<xsl:for-each select="//data/items">
<xsl:call-template name="generate_row">
<xsl:with-param name="items" select="."/>
<xsl:with-param name="style" select="my_data_row_main"/>
</xsl:call-template>
</xsl:fore-each>
<!--ну тут положим еще итоги выводим или еще что, неважно, суть ясна-->
<!-завершаем документ-->
............

Таким вот примерно образом...
Вот мой реальный пример, в котором правда мало понятно, но это пример читстого фасадного XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<?xmlspysamplexml E:\Документы\Фагим\Работа\Матушкин — генератор отчетов\Документ с сырыми данными, получаемыми в ходе генерации.xml?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ask="ask#xslt#scripts" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:msxsl="urn:schemas-microsoft-com:xslt" >

<xsl:import href="excel.system.xslt"/>
<xsl:import href="multi_kvart_fiz_char.var.xslt"/>
<xsl:import href="multi_kvart_fiz_char.private.xslt"/>
<xsl:import href="multi_kvart_fiz_char.header.xslt"/>
<xsl:import href="multi_kvart_fiz_char.gendata.xslt"/>

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:param name="mup">Некотороый город</xsl:param>
<!--вызов скрипта-->
<xsl:param name="date" select="ask:datetime_today()"/>

<xsl:template match="/">
<xsl:call-template name="ex.sys.proc_inst"/>
<s:Workbook>
<xsl:call-template name="this.properties"/>
<xsl:call-template name="this.generate_styles"/>
<s:Worksheet ss:Name="Стандартный отчет">
<s:Table>
<xsl:call-template name="this.column_defenition"/>
<xsl:call-template name="this.caption"/>
<xsl:call-template name="this.headers"/>
<xsl:call-template name="this.generate_data"/>
</s:Table>
</s:Worksheet>
</s:Workbook>
</xsl:template>
</xsl:stylesheet>



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Генерация репорта в excel формате. С чего начать?
От: Mast  
Дата: 23.12.04 17:57
Оценка:
Здравствуйте, Бабокин Дмитрий, Вы писали:

БД>Здравствуйте, Mast, Вы писали:


M>>Очень красивые отчеты можно получать из Crystal.

M>>Обычными путями делается отчет в Crystal, но не открывается во вьювере.
M>>А вызываются его методы, коотрые позволяют экспортировать в Ворд Ёксель ПыДыФы и ХыТыМыЛы кажется.
M>>Я делал только с Excel. Получалось ОЧЕНЬ просто и красиво.
M>>Если еще актуально — пиши, пришлю простенький Hello World.
M>>Ссылку дать не могу, сам разбирался — дневника не вел

БД>Если не сложно, дай мелнький примерчик

пардон, СИЛЬНО отвлекли
еще актуально?
спрашиваю — потому как надо стряпать примерчик, готового нихт.
Re[2]: Генерация репорта в excel формате. С чего начать?
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 23.12.04 18:50
Оценка:
Здравствуйте, Mast, Вы писали:

M>Очень красивые отчеты можно получать из Crystal.

M>Я делал только с Excel. Получалось ОЧЕНЬ просто и красиво.

Делал я Excel-отчеты в CrystalReport... Если тебе нужен отчет типа Hello World — то все просто ништяк. Но чтобы сделать действительно красивый отчет — с красивыми рамочками и тремя десятками ячеек по горизонтали — нужно очень здорово помудохаться... Чуть сдвинулось поле — и Кристал делает левую колонку почти нулевой ширины. Все нужно строго выравнивать по гуидам. Новое поле вставить в середину — это полный абзац — нужно двигать все двадцать-тридцать гуидов по одному, а потом руками поддвигать плохо привязанные поля. Короче, на один отчет уходило очень много времени. То есть сделать МОЖНО, но трудозатраты — большие.
Re[4]: Генерация репорта в excel формате. С чего начать?
От: Бабокин Дмитрий Россия  
Дата: 24.12.04 09:00
Оценка:
Здравствуйте, Mast, Вы писали:

M>Здравствуйте, Бабокин Дмитрий, Вы писали:


БД>>Здравствуйте, Mast, Вы писали:


M>>>Очень красивые отчеты можно получать из Crystal.

M>>>Обычными путями делается отчет в Crystal, но не открывается во вьювере.
M>>>А вызываются его методы, коотрые позволяют экспортировать в Ворд Ёксель ПыДыФы и ХыТыМыЛы кажется.
M>>>Я делал только с Excel. Получалось ОЧЕНЬ просто и красиво.
M>>>Если еще актуально — пиши, пришлю простенький Hello World.
M>>>Ссылку дать не могу, сам разбирался — дневника не вел

БД>>Если не сложно, дай мелнький примерчик

M>пардон, СИЛЬНО отвлекли
M>еще актуально?
M>спрашиваю — потому как надо стряпать примерчик, готового нихт.

Спасибо, уже разобрался
Re[2]: Генерация репорта в excel формате. С чего начать?
От: Аноним  
Дата: 24.12.04 09:37
Оценка: 2 (1)
>Главное, нужна библиотека, которая позволит компактным кодом манипулировать шаблонами отчетов для Excel в формате XML.

Видел такую библиотеку тут.
Бесплатная.
________________________________
Best regards, Oleg Ufaev
Rostov .Net User Group


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Генерация репорта в excel формате. С чего начать?
От: Basilkot Россия  
Дата: 28.12.04 12:01
Оценка:
Здравствуйте,

Если кому-то дорого, компания планирует объявить конкурс на написание лучшей статьи, обзора про Report Sharp-Shooter.

Для особо активных рассматриваются различные скидки (возможно до 100% ).

Статьи рассматриваются на русском и английском языках.
С вопросами и предложениями можете обращаться на kate@9rays.net к нашей очаровательной Катюше.

Best regards,
Basil Kotov
Best regards!
Re: Генерация репорта в excel формате. С чего начать?
От: stasukas  
Дата: 29.12.04 12:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Самый простой вариант — это генерить в формате Xml Spreadsheet. Где-то здесь была статья на эту тему. Суть простая — DataSet может возвращать свое содержимое в формате XML, а затем это содержимое преобразовывается с помощью Xml Stylesheet Transform в Excel Xml Spreadsheet, который и выдается. В Excel XP и 2003 Xml Spreadsheet поддерживается, по поводу более ранних версий сказать ничего не могу. По сравнению с остальными способами этот — самый легкий и не требует работы с COM объектами, интеропа, наличия Reporting Services.


В принципе, такой способ работает, но при больших объемах (несколько тысяч записей) открытие в Excel происходит медленно. В Excel XP были замечены частые зависания.

Тогда уж при наличии XML источника можно сконвертировать его в HTML при помощи XSLT, а потом открыть в Excel (XP и 2003 поддерживают). Тут можно применить и форматирование. А еще можно и браузером открыть или Word.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.