Partager via


Пользовательское именование листов при экспорте из Reporting Services 2008 R2 в Excel

 

Помимо того, что вертикальный текст теперь стало возможным разворачивать как сверху вниз, так и снизу вверх, еще одной приятной мелочью в R2, дававшейся прежде большой кровью, стало пользовательское именование страниц при разбиении отчета на страницы, причем эти имена становятся именами эксельных листов при экспорте отчета в Excel. Ранее экспорт многостраничного отчета в Excel давал стандартные имена листов Sheet1, Sheet2 , ... (или Лист1, Лист2, ... в русской версии). Не всегда это соответствовало ожиданиям. Простейший пример - когда справочник клиентов или продуктов или и т.д. разбивается по алфавиту, на каждой странице находятся продукты, начинающиеся с одной и той же буквы (или двух букв или трех, неважно), и мы хотим включить эту букву в название Excelного листа. До недавних пор для этих целей мы бы изобразили небольшой скриптец из двух частей, первая часть которого дергает веб-сервис Reporting Services, давая ему команду срендерить интересующий отчет в Excel, а вторая часть заходит в получившийся Excelный файл при помощи старой доброй СОМовской (в смысле, Automation) модели и переименовывает имеющиеся в нем листы в соответствии с нужным правилом. Посмотрим, как это делается в R2.

В качестве датасета будет выступать список продуктов из любимой базы AdventureWorks:

SELECT ProductID, Name, Color, ListPrice, Size, Weight, Class

FROM Production.Product

WHERE (ListPrice > 0)

Датасет будет выводиться в виде таблицы

image

Рис.1

внутри которой нужно поставить Page Break перед каждой новой буквой, с которой будет начинаться Name. Вводим в табликсе новую группу по строкам:

image

Рис.2

в которой группировка будет происходить по первой букве поля Name:

clip_image006clip_image008

Рис.3

и уберем колонку, которая автоматически создалась в табликсе под эту группу:

clip_image010clip_image012

Рис.4

В св-вах группы говорим, что каждыйновый экземпляр группы, т.е. группа с буквы "А", группа с буквы "Б" и т.д., должен начинаться с новой страницы:

clip_image014clip_image016

Рис.5

Теперь идем в свойства группы, которые не в диалоговом окне, а в панели свойств, и устанавливаем в св-ве PageName правило именования страниц. Пусть страницы называются так же, как и выражение, на основе которого производится разбиение на группы, т.е. по первой букве поля Name (см. Рис.3):

clip_image018clip_image020

Рис.6

Публикуем отчет, запускаем и экспортим результаты в Excel:

image

Рис.7

Мы видим, что листы в получившемся Excelном файле называются в соответствии с заданным правилом:

image

Рис.8

Замечания.

Наиболее внимательные посчитали количество листов в Excel (12) и заметили, что оно не совпадает с тем, что мы видели при рендеринге в HTML (16). Это потому, что на рис.7 подмешиваются еще физические разрывы в зависимости от выставленной длины страницы. Зайдите в редакторе отчета в меню Report ->Report Properties и поставьте на закладке Page Setup размер страницы побольше.

Правило именования страниц поддерживается для экспорта в Excel, потому что в нем листы могут иметь осмысленные наименования. Допустим, в Wordе страницы не умеют называться, они могут только нумероваться, поэтому какое правило именования страниц ни стояло в Reporting Services, при экспорте в Word мы получим только номера страниц.

 

Алексей Шуленин