码迷,mamicode.com
首页 > Web开发 > 详细

2016.6.16_GUI_DOWNLOAD函数生成word & html

时间:2016-06-16 14:33:08      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

转自:

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 .

 

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

2016.6.16_GUI_DOWNLOAD函数生成word & html

标签:

原文地址:http://www.cnblogs.com/fieldcatalog/p/5590845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!