![]() |
#1 |
Участник
|
Решение проблемы вывода строки длиннее 255 символов в текстовое поле Word
Столкнулся в который раз с проблемой. При выводе строки > 255 символов в ворд при записи в текстовое поле (не в закладку) вылетает ошибка. Решения нашел в сети два, оба с минусами.
Первое - заменить текстовое поле на закладку. Минус - нельзя задать отдельный шрифт для вставляемого текста. Второе - разбить строку на строку 255 + "хвост" и делать в шаблоне кроме текстового поля сразу за ним еще закладку и писать "хвост" строки в нее. Минус - больше правки в коде. Общий главный минус решений - надо править и шаблон и код везде. Нашел решение, которое не обладает ни одним из этих минусов, надо просто переписать метод InsertFieldValue. При попытке вставить слишком длинный текст добавляем в документ на место текстового поля закладку и пишем текст в нее Вместо старого X++: if (field) { if (! this.insertValueInField(field, _anyVal)) { throw error(strfmt("@GEE6409", this.getApplicationName())); } } X++: if (field) { /////////////////////////////////////////////// вставка ////////////////////////////////////////////////////////// if(typeof(_anyVal) == Types::String && strlen(any2str(_anyVal)) > 255) { comBookmarks = m_comDocument.bookmarks(); this.goToBookmark(_bookMark); newBookmark = comBookmarks.Add(_bookmark); newBookmarkRange = newBookmark.range(); try { newBookmarkRange.text(_anyVal); } catch(Exception::Error) { throw error(strfmt("@GEE6409", this.getApplicationName())); } } else /////////////////////////////////////////////// конец вставки /////////////////////////////////////////////////////////// if (! this.insertValueInField(field, _anyVal)) { throw error(strfmt("@GEE6409", this.getApplicationName())); } } Буду очень признателен, если мне укажут на дефекты решения, если таковые есть, или на более простой путь. |
|
|
За это сообщение автора поблагодарили: slava (1), Dreadlock (1), Surevich (0). |
Теги |
word, ошибка, слишком длинная строка |
|
|