转自:
http://blog.csdn.net/wren2004/article/details/5708947
http://www.itpub.net/thread-1008220-1-1.html
今天看到一个程序是从报表按钮点击,生成一个word到本地。word中有表格,还有报表里的一些参数,
同事讨论说只见过下载成excel样式的,还没见过word的。然后就百度了一下,发现了上面的地址。
这段代码原本是将一个简单的表格样式写成html格式(原文好像说是xml格式),然后用GUI_DOWNLOAD函数加后缀名
强行下载到本地,所以在函数中将后缀名改成什么格式,就显示成什么格式。
doc-->word格式
html-->网页显示
原本代码中的表格内容是写死的,和html文件内容放在一起,abap里是用宏加进内表的,宏里面好像没法打断点,
那段html文本我尝试打断,想将其中的表格内容换成变量显示,然后失败了,只能一行一行append才能加变量。
代码如下(注释部分为源代码,表格里面的内容写死了)可以直接运行.
REPORT YZTEST.DATA: BEGIN OF WA_HTML, ZHTML(255), END OF WA_HTML,GT_HTML LIKE TABLE OF WA_HTML.********************************************************************************************DEFINE APPD_HTML.** WA_HTML-ZHTML = &1.* APPEND WA_HTML TO GT_HTML.* CLEAR WA_HTML.*END-OF-DEFINITION.***APPD_HTML: '
1111111111 | ',* '2222222222 | ',* '
1111111111 | ',* '2222222222 | ',* '
1111111111 | ',* '2222222222 | ',* '
'.APPEND WA_HTML TO GT_HTML.WA_HTML-ZHTML = '1-1'. "<<------------can change to variableAPPEND WA_HTML TO GT_HTML.WA_HTML-ZHTML = ' | '.APPEND WA_HTML TO GT_HTML.CLEAR WA_HTML.WA_HTML-ZHTML = '2222222222 | '.APPEND WA_HTML TO GT_HTML.CLEAR WA_HTML.WA_HTML-ZHTML = '
1111111111 | '.APPEND WA_HTML TO GT_HTML.CLEAR WA_HTML.WA_HTML-ZHTML = '2222222222 | '.APPEND WA_HTML TO GT_HTML.CLEAR WA_HTML.WA_HTML-ZHTML = '
1111111111 | '.APPEND WA_HTML TO GT_HTML.CLEAR WA_HTML.WA_HTML-ZHTML = '2222222222 | '.APPEND WA_HTML TO GT_HTML.CLEAR WA_HTML.WA_HTML-ZHTML = '
GUI_DOWNLOAD比较万能,这个似乎什么格式放上去都能原样down下来。
但是这样去生成一个word感觉很业余,比较专业的方法是用ole实现:
*--Include for OLE-enabling definitionsINCLUDE OLE2INCL .*--Global variables*--Variables to hold OLE object and entity handlesDATA GS_WORD TYPE OLE2_OBJECT . "OLE object handleDATA GS_DOCUMENTS TYPE OLE2_OBJECT . "DocumentsDATA GS_ACTDOC TYPE OLE2_OBJECT . "Active documentDATA GS_APPLICATION TYPE OLE2_OBJECT . "ApplicationDATA GS_OPTIONS TYPE OLE2_OBJECT . "Application optionsDATA GS_ACTWIN TYPE OLE2_OBJECT . "Active windowDATA GS_ACTPAN TYPE OLE2_OBJECT . "Active paneDATA GS_VIEW TYPE OLE2_OBJECT . "ViewDATA GS_SELECTION TYPE OLE2_OBJECT . "SelectionDATA GS_FONT TYPE OLE2_OBJECT . "FontDATA GS_PARFORMAT TYPE OLE2_OBJECT . "Paragraph formatDATA GS_TABLES TYPE OLE2_OBJECT . "TablesDATA GS_RANGE TYPE OLE2_OBJECT . "Range handle for various rangesDATA GS_TABLE TYPE OLE2_OBJECT . "One tableDATA GS_TABLE_BORDER TYPE OLE2_OBJECT . "Table borderDATA GS_CELL TYPE OLE2_OBJECT . "One cell of a tableDATA GS_PARAGRAPH TYPE OLE2_OBJECT . "ParagraphDATA GV_POS(5) TYPE N . "Position information for tableCREATE OBJECT GS_WORD 'WORD.APPLICATION' .IF SY-SUBRC NE 0. MESSAGE S000(SU) WITH 'Error while creating OLE object!'. LEAVE PROGRAM .ENDIF .*--Setting object's visibility propertySET PROPERTY OF GS_WORD 'Visible' = '1' .*--Opening a new documentGET PROPERTY OF GS_WORD 'Documents' = GS_DOCUMENTS .CALL METHOD OF GS_DOCUMENTS 'Add' .*--Getting active document handleGET PROPERTY OF GS_WORD 'ActiveDocument' = GS_ACTDOC .*--Getting applications handleGET PROPERTY OF GS_ACTDOC 'Application' = GS_APPLICATION .*--Setting the measurement unitGET PROPERTY OF GS_APPLICATION 'Options' = GS_OPTIONS .SET PROPERTY OF GS_OPTIONS 'MeasurementUnit' = '1' . "CM*--Getting handle for the selection which is here the character at the*--cursor positionGET PROPERTY OF GS_APPLICATION 'Selection' = GS_SELECTION .GET PROPERTY OF GS_SELECTION 'Font' = GS_FONT .GET PROPERTY OF GS_SELECTION 'ParagraphFormat' = GS_PARFORMAT .*--Setting font attributesSET PROPERTY OF GS_FONT 'Name' = 'Arial' .SET PROPERTY OF GS_FONT 'Size' = '10' .SET PROPERTY OF GS_FONT 'Bold' = '1' . "Not boldSET PROPERTY OF GS_FONT 'Italic' = '1' . "ItalicSET PROPERTY OF GS_FONT 'Underline' = '0' . "Not underlined*--Setting paragraph format attributeSET PROPERTY OF GS_PARFORMAT 'Alignment' = '1' . "Right-justifiedCALL METHOD OF GS_SELECTION 'TypeText' EXPORTING #1 = 'This is my first of OLE example!'.*--Setting the view to the main document again*SET PROPERTY OF GS_VIEW 'SeekView' = '0' . "Main document viewCALL METHOD OF GS_SELECTION 'TypeParagraph' .*--Reseting font attributes for the titleSET PROPERTY OF GS_FONT 'Name' = 'Times New Roman' .SET PROPERTY OF GS_FONT 'Size' = '16' .SET PROPERTY OF GS_FONT 'Bold' = '1' . "BoldSET PROPERTY OF GS_FONT 'Italic' = '0' . "Not ItalicSET PROPERTY OF GS_FONT 'Underline' = '0' . "Not underlined*--Setting paragraph format attributeSET PROPERTY OF GS_PARFORMAT 'Alignment' = '1' . "CenteredCALL METHOD OF GS_SELECTION 'TypeText' EXPORTING #1 = TEXT-000.*--Advancing cursor to the new lineCALL METHOD OF GS_SELECTION 'TypeParagraph' .*--Getting entity handles for the entities on the wayGET PROPERTY OF GS_ACTDOC 'Tables' = GS_TABLES .GET PROPERTY OF GS_SELECTION 'Range' = GS_RANGE .*--Adding a table with 3 rows and 2 columnsCALL METHOD OF GS_TABLES 'Add' = GS_TABLEEXPORTING#1 = GS_RANGE " Handle for range entity#2 = '3' "Number of rows#3 = '2'. "Number of columns*--Setting border attribute for the tableGET PROPERTY OF GS_TABLE 'Borders' = GS_TABLE_BORDER .SET PROPERTY OF GS_TABLE_BORDER 'Enable' = '1' . "With border*--Filling the table with dummy data*--Reseting font attributes for table contentSET PROPERTY OF GS_FONT 'Name' = 'Garamond' .SET PROPERTY OF GS_FONT 'Size' = '11' .SET PROPERTY OF GS_FONT 'Bold' = '0' . "Not boldSET PROPERTY OF GS_FONT 'Italic' = '0' . "Not ItalicSET PROPERTY OF GS_FONT 'Underline' = '0' . "Not underlined*--Getting cell coordinatesCALL METHOD OF GS_TABLE 'Cell'EXPORTING#1 = '1' "first row#2 = '1'. "first column*--Getting the range handle to write the textGET PROPERTY OF GS_CELL 'Range' = GS_RANGE .*--Filling the cellSET PROPERTY OF GS_RANGE 'Text' = 'Venkatesh Appikonda' .*--Getting cell coordinatesCALL METHOD OF GS_TABLE 'Cell' = GS_CELLEXPORTING#1 = '3' "third row#2 = '2'. "second column*--Getting the range handle to write the textGET PROPERTY OF GS_CELL 'Range' = GS_RANGE .*--Filling the cellSET PROPERTY OF GS_RANGE 'Text' = 'this is ole example' .*--Advancing the cursor to the end of the tableGET PROPERTY OF GS_TABLE 'Range' = GS_RANGE .GET PROPERTY OF GS_RANGE 'End' = GV_POS .SET PROPERTY OF GS_RANGE 'Start' = GV_POS .CALL METHOD OF GS_RANGE 'Select' .*--Skip some linesDO 10 TIMES . CALL METHOD OF GS_SELECTION 'TypeParagraph' .ENDDO.*--Reseting font attributes for ordinary textSET PROPERTY OF GS_FONT 'Name' = 'Times New Roman' .SET PROPERTY OF GS_FONT 'Size' = '12' .SET PROPERTY OF GS_FONT 'Bold' = '0' . "Not boldSET PROPERTY OF GS_FONT 'Italic' = '0' . "Not ItalicSET PROPERTY OF GS_FONT 'Underline' = '0' . "Not underlined*--Setting paragraph format attributeSET PROPERTY OF GS_PARFORMAT 'Alignment' = '3' . "Justified*--Indent the paragraph onceGET PROPERTY OF GS_SELECTION 'Paragraphs' = GS_PARAGRAPH .CALL METHOD OF GS_PARAGRAPH 'Indent' .CALL METHOD OF GS_SELECTION 'TypeText' EXPORTING #1 = TEXT-002.FREE OBJECT GS_WORD .
....这个看上去略麻烦,等有空仔细研究了再更新吧。