转自:
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: ‘<table style="width:100%;border:1px black solid;font-size:10px; border-collapse:collapse;font-family:Arial Unicode MS;">‘, * ‘<tr>‘, * ‘<td align="center" style="border:1px black solid;">1111111111</td>‘, * ‘<td align="center" style="border:1px black solid;">2222222222</td>‘, * ‘</tr>‘, * ‘<tr>‘, * ‘<td align="center" style="border:1px black solid;">1111111111</td>‘, * ‘<td align="center" style="border:1px black solid;">2222222222</td>‘, * ‘</tr>‘, * ‘<tr>‘, * ‘<td align="center" style="border:1px black solid;">1111111111</td>‘, * ‘<td align="center" style="border:1px black solid;">2222222222</td>‘, * ‘</tr>‘, * ‘</table>‘. ******************************************************************************************** WA_HTML-ZHTML = ‘<table style="width:100%;border:1px black solid;font-size:10px; border-collapse:collapse;font-family:Arial Unicode MS;">‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<tr>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<td align="center" style="border:1px black solid;">‘. APPEND WA_HTML TO GT_HTML. WA_HTML-ZHTML = ‘1-1‘. "<<------------can change to variable APPEND WA_HTML TO GT_HTML. WA_HTML-ZHTML = ‘</td>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<td align="center" style="border:1px black solid;">2222222222</td>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘</tr>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<tr>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<td align="center" style="border:1px black solid;">1111111111</td>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<td align="center" style="border:1px black solid;">2222222222</td>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘</tr>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<tr>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<td align="center" style="border:1px black solid;">1111111111</td>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘<td align="center" style="border:1px black solid;">2222222222</td>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. WA_HTML-ZHTML = ‘</tr>‘. APPEND WA_HTML TO GT_HTML. CLEAR WA_HTML. CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD EXPORTING FILENAME = ‘C:\Users\xabap01\Downloads\a.doc‘ CHANGING DATA_TAB = GT_HTML. IF SY-SUBRC EQ 0. WRITE ‘OK‘. CALL FUNCTION ‘CALL_INTERNET_ADRESS‘ EXPORTING PI_ADRESS = ‘C:\Users\xabap01\Downloads\a.doc‘ EXCEPTIONS NO_INPUT_DATA = 1 OTHERS = 2. ELSE. WRITE ‘ER‘. ENDIF.
GUI_DOWNLOAD比较万能,这个似乎什么格式放上去都能原样down下来。
但是这样去生成一个word感觉很业余,比较专业的方法是用ole实现:
*--Include for OLE-enabling definitions INCLUDE OLE2INCL . *--Global variables *--Variables to hold OLE object and entity handles DATA GS_WORD TYPE OLE2_OBJECT . "OLE object handle DATA GS_DOCUMENTS TYPE OLE2_OBJECT . "Documents DATA GS_ACTDOC TYPE OLE2_OBJECT . "Active document DATA GS_APPLICATION TYPE OLE2_OBJECT . "Application DATA GS_OPTIONS TYPE OLE2_OBJECT . "Application options DATA GS_ACTWIN TYPE OLE2_OBJECT . "Active window DATA GS_ACTPAN TYPE OLE2_OBJECT . "Active pane DATA GS_VIEW TYPE OLE2_OBJECT . "View DATA GS_SELECTION TYPE OLE2_OBJECT . "Selection DATA GS_FONT TYPE OLE2_OBJECT . "Font DATA GS_PARFORMAT TYPE OLE2_OBJECT . "Paragraph format DATA GS_TABLES TYPE OLE2_OBJECT . "Tables DATA GS_RANGE TYPE OLE2_OBJECT . "Range handle for various ranges DATA GS_TABLE TYPE OLE2_OBJECT . "One table DATA GS_TABLE_BORDER TYPE OLE2_OBJECT . "Table border DATA GS_CELL TYPE OLE2_OBJECT . "One cell of a table DATA GS_PARAGRAPH TYPE OLE2_OBJECT . "Paragraph DATA GV_POS(5) TYPE N . "Position information for table CREATE 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 property SET PROPERTY OF GS_WORD ‘Visible‘ = ‘1‘ . *--Opening a new document GET PROPERTY OF GS_WORD ‘Documents‘ = GS_DOCUMENTS . CALL METHOD OF GS_DOCUMENTS ‘Add‘ . *--Getting active document handle GET PROPERTY OF GS_WORD ‘ActiveDocument‘ = GS_ACTDOC . *--Getting applications handle GET PROPERTY OF GS_ACTDOC ‘Application‘ = GS_APPLICATION . *--Setting the measurement unit GET 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 position GET 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 attributes SET PROPERTY OF GS_FONT ‘Name‘ = ‘Arial‘ . SET PROPERTY OF GS_FONT ‘Size‘ = ‘10‘ . SET PROPERTY OF GS_FONT ‘Bold‘ = ‘1‘ . "Not bold SET PROPERTY OF GS_FONT ‘Italic‘ = ‘1‘ . "Italic SET PROPERTY OF GS_FONT ‘Underline‘ = ‘0‘ . "Not underlined *--Setting paragraph format attribute SET PROPERTY OF GS_PARFORMAT ‘Alignment‘ = ‘1‘ . "Right-justified CALL 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 view CALL METHOD OF GS_SELECTION ‘TypeParagraph‘ . *--Reseting font attributes for the title SET PROPERTY OF GS_FONT ‘Name‘ = ‘Times New Roman‘ . SET PROPERTY OF GS_FONT ‘Size‘ = ‘16‘ . SET PROPERTY OF GS_FONT ‘Bold‘ = ‘1‘ . "Bold SET PROPERTY OF GS_FONT ‘Italic‘ = ‘0‘ . "Not Italic SET PROPERTY OF GS_FONT ‘Underline‘ = ‘0‘ . "Not underlined *--Setting paragraph format attribute SET PROPERTY OF GS_PARFORMAT ‘Alignment‘ = ‘1‘ . "Centered CALL METHOD OF GS_SELECTION ‘TypeText‘ EXPORTING #1 = TEXT-000. *--Advancing cursor to the new line CALL METHOD OF GS_SELECTION ‘TypeParagraph‘ . *--Getting entity handles for the entities on the way GET PROPERTY OF GS_ACTDOC ‘Tables‘ = GS_TABLES . GET PROPERTY OF GS_SELECTION ‘Range‘ = GS_RANGE . *--Adding a table with 3 rows and 2 columns CALL METHOD OF GS_TABLES ‘Add‘ = GS_TABLE EXPORTING #1 = GS_RANGE " Handle for range entity #2 = ‘3‘ "Number of rows #3 = ‘2‘. "Number of columns *--Setting border attribute for the table GET 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 content SET PROPERTY OF GS_FONT ‘Name‘ = ‘Garamond‘ . SET PROPERTY OF GS_FONT ‘Size‘ = ‘11‘ . SET PROPERTY OF GS_FONT ‘Bold‘ = ‘0‘ . "Not bold SET PROPERTY OF GS_FONT ‘Italic‘ = ‘0‘ . "Not Italic SET PROPERTY OF GS_FONT ‘Underline‘ = ‘0‘ . "Not underlined *--Getting cell coordinates CALL METHOD OF GS_TABLE ‘Cell‘ EXPORTING #1 = ‘1‘ "first row #2 = ‘1‘. "first column *--Getting the range handle to write the text GET PROPERTY OF GS_CELL ‘Range‘ = GS_RANGE . *--Filling the cell SET PROPERTY OF GS_RANGE ‘Text‘ = ‘Venkatesh Appikonda‘ . *--Getting cell coordinates CALL METHOD OF GS_TABLE ‘Cell‘ = GS_CELL EXPORTING #1 = ‘3‘ "third row #2 = ‘2‘. "second column *--Getting the range handle to write the text GET PROPERTY OF GS_CELL ‘Range‘ = GS_RANGE . *--Filling the cell SET PROPERTY OF GS_RANGE ‘Text‘ = ‘this is ole example‘ . *--Advancing the cursor to the end of the table GET 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 lines DO 10 TIMES . CALL METHOD OF GS_SELECTION ‘TypeParagraph‘ . ENDDO. *--Reseting font attributes for ordinary text SET PROPERTY OF GS_FONT ‘Name‘ = ‘Times New Roman‘ . SET PROPERTY OF GS_FONT ‘Size‘ = ‘12‘ . SET PROPERTY OF GS_FONT ‘Bold‘ = ‘0‘ . "Not bold SET PROPERTY OF GS_FONT ‘Italic‘ = ‘0‘ . "Not Italic SET PROPERTY OF GS_FONT ‘Underline‘ = ‘0‘ . "Not underlined *--Setting paragraph format attribute SET PROPERTY OF GS_PARFORMAT ‘Alignment‘ = ‘3‘ . "Justified *--Indent the paragraph once GET 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 .
....这个看上去略麻烦,等有空仔细研究了再更新吧。
时间: 2024-07-29 23:31:12