Страница 1 из 1
Поведение компонента в Excel
Добавлено: 03 сен 2014, 17:37
Cognitive
Строим отчет в формат docx и excel, свойствах "Поведение" компонента установлены флажки "Может расти" и "Расти в высоту". В формате excel наблюдаем ситуацию, что местами текст полностью не влезает в ячейку, в docx такой проблемы нет. Ниже скриншот. Как решить данную проблему?
Re: Поведение компонента в Excel
Добавлено: 04 сен 2014, 17:34
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).
Спасибо.