Как получить именованные листы Excel при экспорте из SSRS
-
09-09-2019 - |
Вопрос
Всякий раз, когда одностраничный отчет экспортируется в Excel, лист в Excel называется по имени отчета.Если отчет состоит из нескольких страниц, листы называются sheet1, sheet2,....Есть ли какой - нибудь способ указать имена листов в SSRS 2005 ?
решение:Нашел это после некоторого поиска в Google:Изменение имен листов в SQL Server RS Excel:QnD XSLT ( QnD XSLT )
Попробую и опубликую обновление, если оно сработает.
Решение
Некромантия, на всякий случай, если все ссылки отключатся:
Добавьте группу в свой отчет
Кроме того, имейте в виду установить здесь порядок сортировки группового выражения, чтобы вкладки были отсортированы в алфавитном порядке (или как вы хотите, чтобы они были отсортированы).
- "Zeilengruppe" означает "Целевая группа"
- "Gruppeneigenschaften" означает "Свойства группы"
Установите разрыв страницы в свойствах группы
- 'Seitenumbruche' означает "Разрыв страницы"
- 'Zwischen den einzelnen Instanzen einer Gruppe' means 'Between the individual instances of a group'
Теперь вам нужно установить
PageName
из Табликса Участник (группа), НЕ вPageName
из Табликса сами по себе.
Если у вас есть правильный объект, if скажет "Tablix Участник" (Tablix-Элемент на немецком языке) в поле заголовка таблицы свойств.Если это неправильный объект, он скажет Только "таблица/табликс" (без Участник) в поле заголовка таблицы свойств.Примечание:Если вы получите tablix вместо участника tablix, он поместит одно и то же название вкладки на каждой вкладке, за которым последует
(tabNum)
!Если это произойдет, теперь вы знаете, в чем проблема.
Другие советы
Для экспорта на разные листы и использования пользовательских имен, начиная с SQL Server 2008 R2, это можно сделать, используя комбинацию группировки, разрывов страниц и Имя страницы собственность группы.
В качестве альтернативы, если это всего лишь один лист, которому вы хотели бы присвоить конкретное имя, попробуйте Имя начальной страницы свойство в отчете.
Для более подробного объяснения загляните сюда: http://blog .hoegaerden.be/2011/03/23/where-the-sheets-have-a-name-ssrs-excel-export/
В SSRS 2008 R2 используется Имя страницы свойство группы страниц:http://bidn.com/blogs/bretupdegraff/bidn-blog/234/new-features-of-ssrs-2008-r2-part-1-naming-excel-sheets-when-exporting-reports
Чтобы добавить названия вкладок при экспорте в Excel, я использовал следующий метод:
- В окне дизайн отчета выберите объект tablix.
- Откройте окно свойств объекта tablix.
- Добавьте требуемое название вкладки в
PageName
собственность. - Запустите отчет
- Экспортируйте отчет в Excel.
- Теперь имя рабочего листа совпадает с именем
PageName
свойство объекта tablix.
Поместите название вкладки в заголовок страницы или группу TableRow1 в вашем отчете так, чтобы оно отображалось в позиции "A1" на каждом листе Excel.Затем запустите этот макрос в своей книге Excel.
Sub SelectSheet()
For i = 1 To ThisWorkbook.Sheets.Count
mysheet = "Sheet" & i
On Error GoTo 10
Sheets(mysheet).Select
Set Target = Range("A1")
If Target = "" Then Exit Sub
On Error GoTo Badname
ActiveSheet.Name = Left(Target, 31)
GoTo 10
Badname:
MsgBox "Please revise the entry in A1." & Chr(13) _
& "It appears to contain one or more " & Chr(13) _
& "illegal characters." & Chr(13)
Range("A1").Activate
10
Next i
End Sub
Прямого пути не существует.Вы либо экспортируете XML, а затем исправляете XSLT, чтобы правильно его отформатировать (это сложный способ).Более простой способ - написать несколько отчетов без явных разрывов страниц, чтобы каждый экспортировался только на один лист в Excel, а затем написать сценарий, который будет объединять для вас.В любом случае для этого требуется этап постобработки.
Я смог сделать это , следуя более сложным инструкциям , предложенным Валентино Вранкеном и Рао , но вот более простой подход для более простого отчета .Это позволит поместить каждую таблицу на отдельный лист и присвоить им имена в Excel .Похоже , это не влияет на другие виды экспорта , такие как PDF и Word .
Первый в Tablix Properties
из ваших таблиц под General
, проверьте либо Add a page break before or after
, это разделяет отчет на листы .
Затем в каждой таблице щелкните таблицу , затем в Grouping
посмотреть , на Row Groups
стороне , выберите родительскую группу или группу строк по умолчанию , а затем в Properties
посмотреть под Group -> PageBreak
установить BreakLocation
Для None
и PageName
к названию листа .
Метод прямоугольника
Самый простой и надежный способ, который я нашел для создания листов / разрывов страниц, - это использование инструмента прямоугольник.
Сгруппируйте вашу страницу в прямоугольниках или в одном прямоугольнике, который заполняет страницу во вложенном отчете, следующим образом:
Самый быстрый способ, который я нашел для размещения прямоугольника, - это нарисовать его вокруг объектов, которые вы хотите разместить в прямоугольнике.
Щелкните правой кнопкой мыши и в меню макет отправьте прямоугольник обратно.
Выделите все ваши объекты и слегка перетащите их, но убедитесь, что они приземлились на то же место, что и были.Теперь все они будут находиться в прямоугольнике.
В свойствах прямоугольника вы можете настроить разрыв страницы так, чтобы он происходил в начале или конце прямоугольника, а название страницы может быть основано на выражении.
Названия рабочих листов будут совпадать с названием страницы.
Повторяющиеся имена будут иметь суффикс числа в квадратных скобках.
Примечание: Убедитесь, что имена являются допустимыми именами рабочих листов.
Вы могли бы использовать -sed- и -grep- для замены или записи в xml-заголовок каждого файла с указанием желаемого имени листа, например, sheetname1, между любыми вхождениями тегов:
<Sheetnames>?sheetname1?</Sheetnames>
Хотя такое использование свойства PageName для объекта фактически позволяет настраивать имена экспортируемых листов в Excel, имейте в виду, что это также может привести к обновлению определений пространства имен вашего отчета, что может повлиять на возможность повторного развертывания отчета на вашем сервере.
У меня был отчет, к которому я применил это в рамках BIDS, и он обновил мое пространство имен с 2008 по 2010 год.Когда я попытался опубликовать отчет на сервере отчетов 2008R2, я получил сообщение об ошибке, что пространство имен недействительно, и мне пришлось вернуть все обратно.Я уверен, что мои обстоятельства могут быть уникальными и, возможно, так будет не всегда, но я подумал, что это достойно публикации.Как только я обнаружил проблему, эта страница помогла вернуть пространство имен обратно (есть теги, которые также необходимо удалить в дополнение к сбросу пространства имен).: