AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Форматирование таблиц отчетов под экспорт в Excel

Запись от Артем Enot Грунин размещена 20.03.2013 в 10:43
Обновил(-а) Артем Enot Грунин 20.03.2013 в 10:50

Всякий раз, когда я берусь писать отчет SSRS я узнаю что-то новое об этой потрясающей технологии. Как правило, я нахожу баг из числа тех, что обещают исправить начиная с 2005 версии, но все как-то не доходят руки...

В этот раз я столкнулся со следующей проблемой: если в заголовках таблицы есть объединенные ячейки (merge cells) под которыми находятся многострочные поля, то при экспорте в Excel они становятся однострочными.

Сложно сказать чей это дефект, так как в Excel они форматироваться тоже отказываются, однако пользователь справедливо негодует.

Предлагаю вам очередное решение класса "Порно, зато задорно". Суть этого решения в добавлении дополнительного столбца, который будет "эталоном роста". Столбец нужно поместить сбоку от объединенного заголовка и поместить в него нужное количество переносов строки. Столбец не может быть невидимым, иначе в Excel он не попадет. Итак, пошаговое руководство:

1. Создайте новый столбец так, чтобы над ним не было группированных ячеек. Например, поместите его первым или последним.

2. Откройте свойства отчета и на вкладку Code добавьте следующую функцию:
X++:
Public Function Grow(ByVal str As String, ByVal divider As Double, debug As Boolean) As String
      Dim height As Integer = CInt(str.Length / divider)
      Dim dummy As String = CStr(IIf(debug, CStr(str.Length) + "/" + CStr(height), ""))

      For i As Integer = 1 To height - 1
             dummy += vbCrLf
      Next

      Return dummy
End Function
Чтобы открыть свойства отчета, находясь в на вкладке с макетом нажмите меню Report:

Название: reportprop.png
Просмотров: 806

Размер: 7.2 Кб

2. В качестве выражения (Expression) для ячейки нового столбца введите:
X++:
= Code.Grow(ReportItems!<ItemName>.Value, <divider>, <debug>)
В качестве первого параметра функция принимает строку длинна которой определяет количество строк. В данном примере, строка берется не из датасета, а из самой ячейки отчета. Имя ячейки можно узнать в окне свойств:

Название: textboxprop.png
Просмотров: 792

Размер: 6.2 Кб

Второй параметр - делитель, на который требуется разделить длину строки, чтобы получить корректное число строк, которые она занимает. Делитель зависит от размеров поля, шрифта и отступов, поэтому задается на глаз, в "попугаях".

Третий параметр - режим отладки. Если он включен, то в начале строки добавляется значение в формате "Длинна строки / Количество строк". Этот параметр используется чтобы было проще подогнать делитель. Перед публикацией отчета его нужно выставить в значение False.

Название: debug.png
Просмотров: 798

Размер: 3.3 Кб

Удачи!
Размещено в CRM
Просмотров 29015 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:01.