2016.6.16_GUI_DOWNLOAD函数生成word & html

转自:

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 .

 

....这个看上去略麻烦,等有空仔细研究了再更新吧。

posted @ 2016-06-16 14:17  fieldcatalog  阅读(205)  评论(0编辑  收藏  举报