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


MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Форматирование таблиц отчетов под экспорт в Excel
Запись от Артем Enot Грунин размещена 20.03.2013 в 10:43
Обновил(-а) Артем Enot Грунин 20.03.2013 в 10:50
Обновил(-а) Артем Enot Грунин 20.03.2013 в 10:50
Всякий раз, когда я берусь писать отчет SSRS я узнаю что-то новое об этой потрясающей технологии. Как правило, я нахожу баг из числа тех, что обещают исправить начиная с 2005 версии, но все как-то не доходят руки...
В этот раз я столкнулся со следующей проблемой: если в заголовках таблицы есть объединенные ячейки (merge cells) под которыми находятся многострочные поля, то при экспорте в Excel они становятся однострочными.
Сложно сказать чей это дефект, так как в Excel они форматироваться тоже отказываются, однако пользователь справедливо негодует.
Предлагаю вам очередное решение класса "Порно, зато задорно". Суть этого решения в добавлении дополнительного столбца, который будет "эталоном роста". Столбец нужно поместить сбоку от объединенного заголовка и поместить в него нужное количество переносов строки. Столбец не может быть невидимым, иначе в Excel он не попадет. Итак, пошаговое руководство:
1. Создайте новый столбец так, чтобы над ним не было группированных ячеек. Например, поместите его первым или последним.
2. Откройте свойства отчета и на вкладку Code добавьте следующую функцию:
Чтобы открыть свойства отчета, находясь в на вкладке с макетом нажмите меню Report:

2. В качестве выражения (Expression) для ячейки нового столбца введите:
В качестве первого параметра функция принимает строку длинна которой определяет количество строк. В данном примере, строка берется не из датасета, а из самой ячейки отчета. Имя ячейки можно узнать в окне свойств:

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

Удачи!
В этот раз я столкнулся со следующей проблемой: если в заголовках таблицы есть объединенные ячейки (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
2. В качестве выражения (Expression) для ячейки нового столбца введите:
X++:
= Code.Grow(ReportItems!<ItemName>.Value, <divider>, <debug>)
Второй параметр - делитель, на который требуется разделить длину строки, чтобы получить корректное число строк, которые она занимает. Делитель зависит от размеров поля, шрифта и отступов, поэтому задается на глаз, в "попугаях".
Третий параметр - режим отладки. Если он включен, то в начале строки добавляется значение в формате "Длинна строки / Количество строк". Этот параметр используется чтобы было проще подогнать делитель. Перед публикацией отчета его нужно выставить в значение False.
Удачи!
Всего комментариев 0