Поведение компонента в Excel

Обсуждение Stimulsoft Reports.WPF
Ответить
Аватара пользователя
Cognitive
Сообщения: 19
Зарегистрирован: 29 июл 2013, 09:47
Контактная информация:

Поведение компонента в Excel

Сообщение Cognitive »

Строим отчет в формат docx и excel, свойствах "Поведение" компонента установлены флажки "Может расти" и "Расти в высоту". В формате excel наблюдаем ситуацию, что местами текст полностью не влезает в ячейку, в docx такой проблемы нет. Ниже скриншот. Как решить данную проблему?

Изображение
Текущая версия: Version: 2013.1.1600 from 2 April 2013 .NET Framework v4.0.30319
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Поведение компонента в Excel

Сообщение Ivan »

Здравствуйте.

При экспорте в Excel обычно возникает две проблемы:
1. Межстрочный интервал в многострочном тексте больше чем в предпросмотре, в результате последняя строка текста может быть частично обрезана.
2. Текст не помещается в ячейку по ширине, хотя в предпросмотре помещается, в результате последнее слово переносится на следующую строчку.

Причины этих проблем в следующем.
1. Отрисовка текста в Excel осуществляется собственными методами, которые не совпадают ни с Winforms (GDI+ (Standard, Typographic), GDI (WYSIWYG)), ни с Wpf, ни с Flex.
Обычно межстрочный интервал в Excel получается на 5-15 % больше, чем в предпросмотре, особенно для мелких шрифтов.
К сожалению, в Excel нет средств для регулирования межстрочного расстояния.
2. Из-за собственной отрисовки также и ширина букв/слов получается другой, поэтому текст может не помещаться в ячейку по ширине, и последнее слово в строке будет переносится на следующую строчку.
К сожалению, управлять шириной текста в Excel тоже нельзя.
3. Также в приложениях MS-Office функция WYSIWYG часто работает некорректно: ширина слов при разном масштабе может получаться разная. Особенно для маленьких шрифтов.
В результате при одном масштабе текст помещается в одну строку, а при другом масштабе уже не помещается, и последнее слово переносится на следующую строчку.
Наиболее адекватно документ выглядит в предпросмотре печати.
Поэтому вполне обычная ситуация, когда отчет в Excel в режиме редактирования и в предпросмотре печати выглядит по-разному, еще больше различий можно увидеть, если в режиме редактирования менять масштаб страницы от 50% до 200%, при этом самый длинный текст на странице может обрезаться на разное количество строчек в зависимости от масштаба.

Хорошая иллюстрация для третьего пункта - прилагаемый файлик "Excel font bug sample.xls", сделанный вручную в Excel.
На 90% обрезается последняя строчка.
На 100% снизу получается одна пустая строчка.
На 110% текст заполняет ячейку полностью.
В предпросмотре печати снизу получается две пустых строчки.

Из-за перечисленных проблем невозможно точно передать вид отчета в Excel.
Варианты примерного решения проблемы:
1. Попробовать выбрать для текста разные шрифты; для каждого шрифта попробовать разный TextQuality - выбрать надо тот вариант, при котором строка текста в превью получается самой длинной.
2. Установить для текстбокса правое поле; в Excel у ячеек нет полей, поэтому будет получаться запас пустого места для текста.
3. В конце каждого текста добавлять пустую строку для компенсации погрешности.
4. Не самый простой вариант. Установить свойство AllowHtmlTags в True, добавить в начало текста команду <line-height="1.1"> и заменить (при необходимости) все переносы строк на <br>. При этом в превью высота строки будет больше обычной. Скорее всего придётся правильно подобрать коэффициент высоты строки, он может быть разный для разных шрифтов (для примера взяли 1.1).

Спасибо.
Вложения
Excel font bug sample.xls
(16.5 КБ) 508 скачиваний
Ответить