Выгрузка в word abap
Sometimes it may be required in some projects to create a formatted word document programmatically. Here is a step by step approach on how to go about it using the OLE concept.
ABAP KEYWORDS USED FOR OLE AUTOMATION
ü CREATE OBJECT
1) Creating an OLE Object
This keyword generates an object obj of the class class .
Basic Form: CREATE OBJECT obj class .
Addition: LANGUAGE langu
The addition LANGUAGE determines the language chosen for method.
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
2) Setting Property of an Object
The keyword sets the property p of the object obj according to the contents of the field f . The object obj must be of type OLE2_OBJECT.
Basic Form: SET PROPERTY OF obj p = f .
Addition: NO FLUSH
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
3) Getting Property of an Object
This command copies the property p of the object obj to the field f .
The object obj must be of type OLE2_OBJECT.
Basic Form: GET PROPERTY OF obj p = f .
Addition: NO FLUSH
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
4) Calling method of an Object
The key word calls the method m of the object obj. m can be a literal or a variable.
Basic form: CALL METHOD OF obj m.
It stores the return value of the method in the variable f.
2. EXPORTING p1 = f1. pn = fn
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
5) Freeing an Object
This releases the storage space required for the object obj. The object can then no longer be processed.
Basic Form: FREE OBJECT obj .
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
Important tables associated with OLE:
ü TOLE -- OLE Applications
For us to be using the word application, it must be entered in the table TOLE. In order to maintain table TOLE we use the transaction SOLE.
ü OLELOAD - OLE type Information load
- How to find Methods and Properties of the Word object
In table OLELOAD we can find all the Methods and Properties which can be used along with the word application.
The result will contain all the methods and properties that can be used with Word Application.
Also one more thing that is helpful for finding methods, their parameters and their properties is the Visual Basic Editor in the word document.
After you open a word document, press ALT+F11. It will open the Visual Basic Editor.
Then go to VIEW -> Object Browser or simply press F2.
In that Select WORD from the Dropdown and you can give the method name or property and you can get details such as Parent class, what is the function of the term, the no. of parameters and their details and so on.
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
We can also find which method to use by recording macros in the VB editor.
Suppose if you want to find which method or property to use for changing the color of font, then we open a word document, go to VIEW->Record Macro, change color of the font in the document and press ALT+F11.
It will contain which property to use to achieve the required functionality. Here the code may not contain the exact mapping between VB and ABAP.
How to download a word document using a sample program
The sample program will download details of vehicles into the word document. The vehicle data will be kept in a table.
DATA DECLARATIONS
All OLE objects are of type OLE2_OBJECT.
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
SELECTING VEHICLE DATA
For creating the word document we are selecting 4 fields from VLCVEHICLE table.
Vehicle GUID (Globally Unique Identifier)
Internal Vehicle Number
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
CREATING WORD DOCUMENT
a) Creating Word Object
Here we are creating a word object and opening a word document.
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
b) Setting font attributes
Here we can specify the FONT name, size, whether the line should be bold or italic or underlined. We can also set the text alignment i.e. centered or right justified or left justified.
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
c) Filling Data
Writing the first line.
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
We will find out how many lines the internal table is holding and we will create a table with that many rows and four columns.
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
Writing the header details of the table
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
Writing the Vehicle Details in each cell of the table
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
Saving the file
Ошибка визуализации кода макроса: задано недействительное значение для параметра «com.atlassian.confluence.ext.code.render.InvalidValueException»
Хочу подарить народу ФМ для выгрузки данных в WORD, EXCEL.
Не хочу, чтобы пропадал мой "скорбный труд"
Прежде чем задать вопрос в теме, рекомендую сначала почитать FAQ (ЧАВО) - ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ, который можно увидеть чуть ниже.
Дополнение от 09/08/2007:
Разработка позволяет использовать для выгрузки WWW-шаблоны (транзакция SMW0) и BDS-шаблоны (транзация OAOR). Основной ее принцип - максимальное соответствие технологии WYSIWYG. Т.е. ваша ABAP-программа занимается только выборкой и выводом данных, форма отчета, раскраска и стиль задаются шаблоном. Технология вывода в Word и Excel идентичная, т.е. практически любую форму отчета Excel можно реализовать средствами Word (и наоборот), не изменяя при этом вашу ABAP-программу, просто заменив шаблон.
При этом, для нормального вывода, нет необходимости в каждый шаблон вставлять какие-либо макросы. Однако возможно использовать собственные макросы для специфической обработки, например для автоматического форматирования. При чем они будут работать даже при включенном максимальном уровне безопасности макросов MS-Office, также не требуется разрешения доступа к VB, что позволяет соблюсти политику безопасности компании.
Все это позволяет максимально упростить использование уже готовых форм, подготовленных средствами MS-Office, например, выгруженных из Консультант+. Т.о. разработку и модификацию шаблонов можно поручить функционалам или продвинутым пользователям.
Дополнение от 12/01/2010:
До версии 2.6 подразумевалась полностью ручная установка всех объектов разработки: программ, модулей, шаблонов, элементов словаря и т.д. Это создавало определенные неудобства, а для начинающих разработчиков серьёзные трудности.
С версии 2.6 возможна облегченная процедура установки-обновления разработки:
1. Распаковать ZIP-файл в корень диска C:. Создастся папка C:\ZWWW\
2. В системе создать запрос разработки.
3. Создать класс разработки ZWWW_EXCEL. Если хотите использовать другое имя (или уже используете), то нужно переименовать папку ZWWW_EXCEL.DEVC на .DEVC
4. В системе создать программу с именем ZWWW_MIGRATE и скопировать в нее содержимое файла C:\ZWWW\ZWWW_EXCEL.DEVC\PROG\ZWWW_MIGRATE\REPORT.txt (с версии 2.90 \ZWWW_EXCEL.DEVC\PROG.R3TR\ZWWW_MIGRATE\REPS.LIMU\ZWWW_MIGRATE>ABAPTEXT.TXT)
5. Запустить ZWWW_MIGRATE, в экранное поле S_TRKORR подставить номер вашего запроса, в S_CLASS имя вашего класса, выбрать режим "Импорт" (радиокнопка P_IMPORT), нажать F8, в ALV-Grid выбрать необходимые компоненты (предпочтительно ВСЕ) и кликнуть кнопочку Import.
Всё!
Дополнение от 22/01/2010:
Пример программы Hello World
Data:
it_val type standard table of ZWWW_VALUES
with header line.
* Выведем текст в ячейку с адресом C5
it_val-VAR_NAME = 'C5'.
it_val-VALUE = 'Hello World!'.
Append it_val.
Call function 'ZWWW_OPENFORM'
exporting
FORM_NAME = 'ZWWW_MACROS'
PRINTDIALOG = ''
tables
IT_VALUES = it_val.
Последний раз редактировалось Parazit Сб, авг 21 2021, 21:02, всего редактировалось 25 раз(а).
FAQ (ЧАВО) - ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Шаблон Ворд-документа содержит колонтитул, в котором я хочу разместить данные(из АБАП) - обычным способом . ничего не получается - похоже на то, что колонтитулы при поиске текста для замены игнорируются
В колонтитуле нужно создать закладку. Тогда работает как присвоение всей закладки (FIND_TEXT = пусто), так и поиск/замена в ней отдельного текста.
Подскажите, можно ли сделать так, чтобы повторять табличку на одном листе Excel n-ное кол-во раз? Например, для каждого контрагента своя табличка и свои надписи над табличкой и подписи под ней?
Конечно можно!
Самый простой наглядный вариант, каждой строке шаблона присвоить имя и собирать отчет из них, как из кирпичиков. Опять же для наглядности, можно присвоить имя (например: "МестоВывода") пустой строке в самом низу и перекладывать туда строки шаблона.
Типа так:
*табличка 1
SetVal 'Место Вывода' 1 '' 'V' 'Заголовок'.
SetVal 'Место Вывода' 2 '' 'V' 'Строка'.
SetVal 'Место Вывода' 2 '[1]' '' 'значение ячейки 1'.
SetVal 'Место Вывода' 2 '[2]' '' 'значение ячейки 2'.
SetVal 'Место Вывода' 3 '' 'V' 'ПустаяСтрока'.
*табличка 2
SetVal 'Место Вывода' 4 '' 'V' 'Заголовок'.
SetVal 'Место Вывода' 5 '' 'V' 'Строка'.
SetVal 'Место Вывода' 5 '[1]' '' 'значение ячейки 1'.
SetVal 'Место Вывода' 5 '[2]' '' 'значение ячейки 2'.
SetVal 'Место Вывода' 6 '' 'V' 'ПустаяСтрока'.
После выгрузки файл защищен соответственно его нельзя редактировать.
Для снятия защиты он требует пароль.
Поэтому вопрос: Какой пароль? И можно ли сразу сделать так чтобы защита листа была снята?
По умолчанию параметр PROTECT = 'X', поэтому документ защищен, пароль генерится динамически. Соотвественно, укажите PROTECT = '' и всё откроется.
Кстати, если необходимо изменение только отдельных частей документа, можно открыть их штатными средствами Word и Excel в шаблоне, в таком случае PROTECT отменять не надо.
При выгрузке в excel числа преобразуются в строку.
Поэтому в excel не работают суммы по ячейкам с этими числами.
Можно ли при выгрузке указать что в ячейке должно быть число, а не текст?
Используйте такой текстовый формат для вывода чисел, чтобы разделитель десятичных знаков был точкой, и не было разделителей тысяч.
Самый простой способ VALUE = .
Версия 2.71 была адаптирована для использования через Web GUI. Это позволяет использовать обычные разработки с выгрузкой отчетов MS Office через веб-интерефейс.
Для использования напрямую из Web Dynpro пока данная разработка не пригодна.
Есть примеры, например ZWWW_SAMPLE_INVOICE.
Строка
SetVal 'Я_Формат' '' '' 'M' 'Macros_AutoFit'.
запустит макрос с именем Macros_AutoFit, передав ему в качестве параметра именованную область 'Я_Формат'.
Указанная именованная область 'Я_Формат' дожна быть обязательно объявлена в листе, даже если не используется - без нее макрос не запускается.
Макрос должен лежать в Modules (не в Книге и не в Листе)
Вывожу в ячейку Excel значение (текстовое) больше 255 символов - ничего не выводится, до 255 - все нормально.
Есть ограничение на длину строки?
Это ограничение функции поиска/замены Excel. Обойти можно по разному. Например вывод в ячейку напрямую - VAR_NAME = имя ячейки; FIND_TEXT = пусто. Или выводить частями, в ячейку поместить несколько меток, типа [1][2][3]. Однако надо учитывать, что у Excel есть и другое ограничение на количество символов в ячейке (около 900 байт для MS 2003).
при выгрузке в EXCEL, текстовая переменная 310000000000000717 отображается в шаблоне как 3.1Е+17. Поле в шаблоне текстовое, в таблице с выходными данными тоже нормальное значение.
Проблема в том, что Excel в функции поиска/замены, которую я использую, пытается любую информацию преобразовать в число при подстановке его в ячейку, независимо от типа ячейки. Я считаю это косяком Excel. Избавиться удается при помощи апострофа в первом символе содержимого ячейки, например в шаблоне можно сделать так '[1], или к выгружаемым данным прибавлять апостроф, типа так '310000000000000717
Еще и значение "02" превращается в просто "2". В общем, сконкатенейтил апостроф и значение, пусть пока так. Думал еще макросом заменить апостроф на ничто — фиг, слетает формат.
Вот такой макрос убирает все апострофы, причем одни махом во всей выделенной области. Главное, чтобы форматы ячеек были какие-надо.
Что отрабатывает первым, макрос или вставка данных в Excel?
У меня проблема в следующем, при формирования ТЗ у меня запускается макрос, который добавляет n-ое количество столбцов, после чего вставляются данные, но в добавленные столбцы ничего не падает, т.е. происходит смещение данных за границы таблицы. Такое ощущение, что сначала записались данные таблицы, а потом макрос отработал.
Заполнение в абапе:
** Макрос
setval 'Value_mac' '' '' '' col_num.
setval 'Value_mac' '' '' 'M' 'CopyCol'.
** Строка
setval 'POSITION' lv_pos '[1]' 'R' lv_strvalue.
Вывод производится в алфавитом порядке значения VAR_NAME и не зависит от того порядка, в котором заполняется внутренняя таблица.
В приведенном примере сначала сработает заполнение POSITION, а затем вызовется макрос для VALUE_MAC. В данном случае можно переименовать VALUE_MAC, например, в A_VALUE_MAC.
Последний раз редактировалось Parazit Чт, апр 21 2011, 10:13, всего редактировалось 16 раз(а).
Разумеется можно и через транспорт
Вешаешь всё на один запрос целыми объектами. Лучше даже ручками список заполнить типа:
R3TR FUGR [имя]
R3TR PROG [имя]
R3TR DOMA [имя]
R3TR DTEL [имя]
R3TR TABL [имя]
Проблема может возникнуть с именами. Вдруг повторятся ) тогда загруженная версия убъёт предыдущую.
*=======================================
Есть еще всякие программки, которыми пользуются для выгрузки/загрузки, которые в своём формате фигачат. У нас где-то мелькала такая, но загружать я ей не пробовал ни разу..
Хочу подарить народу ФМ для выгрузки данных в WORD, EXCEL.
Не хочу, чтобы пропадал мой "скорбный труд"
Есть функциональная группа, элементы данных и домены в словаре, программы с примерами.
А что, использование стандартных средств уже не катит?
По-моему, в системе достаточно ФМ, классов и интерфейсов, чтобы состряпать такую программку за 3-4 часа.
_________________
"Прежде чем сделать что-то, подумай, к чему это может привести. "
Хочу подарить народу ФМ для выгрузки данных в WORD, EXCEL.
Не хочу, чтобы пропадал мой "скорбный труд"
На сегодняшний день, ZWWW для выгрузки в WORD и EXCEL используется практически повсеместно. Однако, как выяснилось, не все знают про одну возможность. А именно копирование метки в область val_type = ‘V’.
Все возможные варианты можно посмотреть в программе ZWWW_MANY_LIST. Тут же мы разберем простенький пример.
Задача такая: Необходимо вывести в одном документе некий приказ, и чтобы для каждого табельного номера он был на новом листе.
Рис.1 Шаблон приказа с метками замены
В ZWWW есть возможность копировать содержимое метки, в указанную область. Для этого в документе мы должны создать три Закладки:
Рис.2. Закладка HEADER2
1 – HEADER2 – закладка это наша основная область, в которой находится весь текст и метки.
Рис.3. Закладка NewPage
2-NewPage – закладка служит для того чтобы создавать новые страницы
Рис.3. Закладка Line2
3- Line2 – данная закладка как раз является областью в которую мы будем вставлять две предыдущих по мере необходимости.
Общий алгоритм такой:
- Вставляем в область Line2 Данные из закладки HEADER2.
- После этого заменяем в области HEADER2 все метки.
- Вставляем в область Line2 Разрыв страницы, который находится в закладке NewPage
- Повторяем в цикле, пока не закончатся данные в таблице.
Замечание:
1. При этом необходимо учитывать var_num, как в случае таблиц. Т.е. каждая вставка области, будь то Line2 или HEADER2 является новой строкой в таблице.
2. Если область ни разу не была вставлена, то она не исчезает из шаблона и окажется в выходном формуляре в изначальном виде. У вас может быть несколько областей для вставки, и, скажем, для одних табельных номеров вы хотите использовать одну текстовку, а для других другую. И так получилось, что выбрались люди, подходящие только под первую из текстовок. При этом если мы, ни разу не использовали вторую, она останется в формуляре, ее надо будет удалить при помощи val_type = ‘D’ . Первая же исчезнет сама.
Last month, i published my abstraction class to manage Word OLE link. It can generate complete (and complex) word document, but it is a little slow for big tables.
OLE is an old technology… DOCX is an XML file extension… Enough to change my mind about word file generation. Exit OLE, welcome XML 🙂
I updated my abstraction class to generate DOCX file from ABAP directly, without any OLE usage. I know there are actually some projects that want to do that (abap2docx for example). But i think theses projects are too complex to use, or not yet usable in the true life.
With my class, it never be easier to generate DOCX. You never have to use or understand XML.
Here is the code of the “hello word” program.
The class is simple, but can manage complex documents !
Here is the feature list :
- Empty document creation or with use of template (docx, dotx, docm, dotm)
- Write text with or without style (character style and/or paragraph style)
- Option to manualy apply bold, underline, italic, strike, subscript, superscript, small caps, font name & size, font color, highlight color, letter spacing
- Management of alignment, indent, spacing before/after paragraph
- Break line, page, section, continuous section
- Write table with or without style (and option to define cell format : bold, color…)
- Write Header / footer
- Write end note / foot note
- Write comments
- Write numbered label (figure, table…)
- Write table of labels (figures, tables…)
- Choose portrait/landscape, manage page border
- Add images
- Add canvas
- Insert table of content (toc)
- Add and manage document properties
- Create and insert custom fields
- Style creation (character/paragraph)
- Manage files in SAP Web Repository for template/image (SAPWR, access with transaction SMW0)
In the download file, you will find a test program that contain the class CL_WORD and a demo of how to use it. You will find also some images and 1 template. Theses files are used by the test program, but are not necessary for the class itself.
Last but not the least, source code is visible here : Show code in Nugget – Quelquepart
Feel free to comment here 🙂
My others blogpost :
Assigned Tags
ABAP2XLSX is fine you don't know anything about XML 🙂 Unfortunetly ABAP2DOCX seems to be in hibernation.
As all your other projects are really great I will give it a try for sure!
Hope you could find it usefull
Will there be a separate class? I guess this would be more reuseable.
And sad to say that, but the generated docs file cant be opened with Word 2010
Have you chaanged the path of image/template to appropriates ones on your computer ?
I think the generated word file dont use the template 😉
If everything is ok in the demo program and there is the error, could you please expend the word error popup and write me the exact error message please ? And also send me the generated word file ?
About the separate class:
For a customer development, i always use separated class (SE24).
But for tools i share with other people, i find it more simple to use an include SE38. Easier to read, only 1 object to transfer.
You could easily recreate a class if you require it, but which usage require SE24 class instead of embedded one ? (just remove "demo" code and you could use the class as an "include" in any program)
In next release i will separate demo code and class code.
You can take the new 1.1 version where the class is in a separate include file.
Many thanks for ZTOAD. Simply an awesome tool to use.
Quick question! I have downloaded this utility but it has a file ZTEST_DOC.slnk. How to load it in SAP?
Thank you Ahmed, i like it too 😀
For .slnk, just use saplink, it is same as .nugg but with only 1 object inside (a little smaller and a little faster for me to generate)
I just did. But it says
Start import of nugget
Nothing below that. Please find attached.
Another thing. When I choose Display Nugget. It says Empty Nugget.
yes, its not a nugget but a slinkee file. Dont you have a second tab for slinkee files in your version of saplink ?
Oops! My bad. Truly an honest mistake. I just ignored that tab.
it take many years before I use it 😉
Another great piece of code.. thank you.
This is fantastic.
Do you see this as a possible replacement for SMARTFORMS/SAPSCRIPT in some cases? You would create a word template with your logo and the general format and then use SAP to dynamically fill the business data?
PS ABAP2XLS is used in real life at my company, but I have wrapped around it several helper classes to make it easy for our developers to use.
My remark about real life usage concern only DOCX generation 🙂
If abap2docx was as wonderfull as abap2xls, my tool never be born 😉
regarding your question about smartform/sapscript replacement. If the user requirement is to have DOCX file, yes i think you can replace smartforms. Create the word template with all header/footer, and all styles you need. You could also insert all image you will need.
Remember that actual class drop existing document content, so you have to write all pages in program. But if required, it is very easy to change the class to add an option to keep actual text content of the template. (edit : Done for the next release)
For example, if you have only individual fields to fill, you can create a complete docx into word, replace all variable part with word custom fields. And with the class you just have to define custom fields value 🙂
I have a Customer requirement like this.. I need Show a Word templete with header, logo, footer and more thing like a Smartforms with an ABAP program.
May you please elaborate on your helper class? (What exactly does it do?)
Wouldn't it be useful to enrich the original project with it?
When the ABAP2XLSX project was on the SCN code exchange I found it really easy to contribute, and I was right up there on the leader board of active contributors.
I have to say I am struggling with the environment where the project is hosted now, as I think other people are - because I think the project has totally stalled since it moved. I could be looking in the wrong place but there does not seem to have been any activity for months.
In any event I have a helper class where I store the code that does not change between different ALV reports. I call a method of the helper to change the ALV object into an ABAP2XLSX object, then the program at hand makes application specific changes, and then another method of the helper sends the modified EXCEL object as an email.
There is more detail on this in chapter 11 of my good old book. Moreover, if you got to the SAP Press Website and look up my book you can download the associated materials for free, and their you will find class ZCL_EXCEL_EMAILER and some of it's friends, which are my helper classes. Looking at the code I just noticed it still has a BREAK HARDYP in it, oh well, too late now.
The code has lots of comments but they say WHY things are done, not how, as the ABAP2XLS methods are so well named it is obvious what they do i.e. you don't have to think too hard what a method call like WORKSHEET->FREEZE_PANES does.
I asked my editor why SAP Press let people download supplementary material for their books for free, and she said having some sort of secret code you get with each book was just too much extra effort for no real benefit. In fact when people download such things they are often so intrigued by the content (code) they end up buying the book anyway.
Описание проблемы.
Иногда требуется, чтобы текст, выводимый в шаблон, был достаточно длинным (например: длинные названия организаций, полные наименования адресов, список каких либо характеристик, которые должны умещаться например в одной ячейке выводимой таблицы и т д. ).
Если не предпринимать никаких дополнительных манипуляций, то при выводе в MS Excel или MS Word текста через переменную ABAP, она должна содержать в себе не более чем 255 символов иначе текст переданный через переменную не выведется на форму вовсе.
Рассмотрим ниже случай, когда нам все-таки нужно передать через переменную текст длиной более 255 символов.
Длинные текстовые строки. Решение.
В случае длинных текстовых полей в ZWWW предусмотрен механизм, позволяющий передавать длинную строку путем разбивания специальным образом этой строки на подстроки длиной не более 255 символов. Разбиение строк нужно производить в таблице структуры zwww_values_t непосредственно перед вызовом функционального модуля 'ZWWW_OPENFORM' на вход которого в качестве параметра эта таблица и подается . Ф ункционал ZWWW самостоятельно соберет эти строки обратно в одну и выведет на шаблоне документа как значение одной переменной.
Подадим, как обычно, на вход функционального модуля 'ZWWW_PREPARE_TABLE’ таблицу, содержащую данные бизнес-логики (в частности, таблицу содержащую поля со строками длинной более чем 255 символов, в нашем примере это таблица lt _ table ). Этот функциональный модуль на выходе вернет нам таблицу с нашими данными, но уже в формате zwww_values_t, необходимом для вывода данных на шаблон через 'ZWWW_OPENFORM’. В нашем примере это таблица lt_val.
CALL FUNCTION 'ZWWW_PREPARE_TABLE'
EXPORTING
line_name = 'TAB_LINE'
val_type = ''
TABLES
it_any_table = it_table
it_values = lt_val
EXCEPTIONS
OTHERS = 1.
IF sy-subrc EQ 0.
* вывод строки длиной больше чем 255 символов
PERFORM wrap_text CHANGING lt_val.
ELSE .
CLEAR lt_val[].
ENDIF . "CALL FUNCTION 'ZWWW_PREPARE_TABLE
Далее, подстановкой полученной таблицы в подпрограмму ‘wrap_text’ проанализируем поля на предмет их длины и преобразуем сформированную таблицу структуры ‘zwww_values_t’ к виду с разбиением длинных строк на группу строк, отвечающих за одну переменную длиной не более чем 255 символов.
FORM wrap_text CHANGING ctd_zwww TYPE zwww_values_t.
DATA :
ls_zwww TYPE zwww_values,
lv_index TYPE sy-index.
FORM word_wrap USING iv_index TYPE sy-index
CHANGING cs_zwww TYPE zwww_values
ctd_zwww TYPE STANDARD TABLE .
DATA :
lv_string TYPE char3000,
ltd_text255 TYPE tttext255,
lv_tabix LIKE sy-tabix,
lv_len TYPE i,
lv_index TYPE sy-tabix,
lv_first_leter TYPE c VALUE 'a' .
FIELD-SYMBOLS TYPE zwww_values.
CHECK strlen( cs_zwww-value ) GT 255 .
lv_string = cs_zwww-value.
lv_len = 200 .
lv_index = iv_index.
CALL FUNCTION 'SDB_WORD_WRAP'
EXPORTING
textline = lv_string
outputlen = lv_len
TABLES
out_lines = ltd_text255
EXCEPTIONS
outputlen_too_large = 1
OTHERS = 2 .
IF sy-subrc EQ 0.
CLEAR cs_zwww-value.
LOOP AT ltd_text255 ASSIGNING FIELD-SYMBOL ().
lv_tabix = sy-tabix + 1 .
INSERT INITIAL LINE INTO ctd_zwww INDEX lv_index ASSIGNING .
lv_index = lv_index + 1 .
MOVE-CORRESPONDING cs_zwww TO .
-find_text = lv_first_leter && lv_tabix.
-value = .
cs_zwww-value = |< cs_zwww-value >< -find_text >|.
ENDLOOP .
CONDENSE cs_zwww-value.
* Implement suitable error handling here
ENDIF .
Далее, подставляем полученную таблицу lt_val как обычно в 'ZWWW_OPENFORM’ и получаем результат с учетом длинных строк.
Результат работы алгоритма может выглядеть как на картинке ниже.
На картинке выше длинный текст в ячейке в MS Excel не умещается на отображаемой части ячейки листа MS EXCEL 2013 т.к. максимальная высота ячейки в MS EXCEL 2013 составляет 546 пикселей. Кроме этого имеется ограничение на количество выводимых символов внутри одной ячейки - 1024 символа. Эти особенности редактора MS Excel нужно иметь ввиду и учитывать при выводе таблиц с полями, содержащими очень длинные строки.
В некоторых случаях, на этапе проектирования шаблона, возможно, имеет смысл сделать выбор в пользу MS Word, который позволяет выводить в ячейку таблицы строки с существенно большим количеством символов.
Читайте также: