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 .

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

时间: 2024-07-29 23:31:12

2016.6.16_GUI_DOWNLOAD函数生成word & html的相关文章

spark 深入学习 05】RDD编程之旅基础篇-01

---------------- 本节内容 1.RDD的工作流程 2.WordCount解说  · shell版本WordCount  · java版本WordCount ---------------- 一.RDD工作流程 1. RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当作一个数组,这样的理解对我们学习RDD的API是非常有帮助的.本文所有示例代码都是使用scala语言编写的.RD

hadoop命令fsck命令

在HDFS中,提供了fsck命令,用于检查HDFS上文件和目录的健康状态.获取文件的block块信息和位置信息等. 具体命令介绍: -move: 移动损坏的文件到/lost+found目录下 -delete: 删除损坏的文件 -openforwrite: 输出检测中的正在被写的文件 -list-corruptfileblocks: 输出损坏的块及其所属的文件 -files: 输出正在被检测的文件 -blocks: 输出block的详细报告 (需要和-files参数一起使用) -locations

2017年计算语义相似度最新论文,击败了siamese lstm,非监督学习

Page 1Published as a conference paper at ICLR 2017AS IMPLE BUT T OUGH - TO -B EAT B ASELINE FOR S EN -TENCE E MBEDDINGSSanjeev Arora, Yingyu Liang, Tengyu MaPrinceton University{arora,yingyul,tengyu}@cs.princeton.eduA BSTRACTThe success of neural net

OS_Windows_10_X64_office重新激活记录

Microsoft office 2016 专业增强版  重新激活记录 1.操作记录:  1.1 以管理员权限运行CMD 1.2 进入office  kms激活目录 cd C:\Program Files (x86)\Microsoft Office\Office16 1.3 输入激活码激活   cscript ospp.vbs /inpkey:XNTT9-CWMM3-RM2YM-D7KB2-JB6DV 1.4 完整记录: Microsoft Windows [版本 10.0.17763.475

聊一聊前端模板与渲染那些事儿

欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码): https://segmentfault.com/blog/frontenddriver 作为现代应用,ajax的大量使用,使得前端工程师们日常的开发少不了拼装模板,渲染模板.我们今天就来聊聊,拼装与渲染模板的那些事儿. 如果喜欢本文请点击右侧的推荐哦,你的推荐会变为我继续更文的动力 1 页面级的渲染 在刚有web的时候,前端与后端的交互,非常直白,浏览器端发出URL,后端返回一张拼好了的HTML串

使用 Raspberry Pi 上的传感器在 Node.js 中创建一个 IoT Bluemix 应用程序

先决条件 一个IBM Bluemix 帐号,一个 Raspberry Pi 2 或 3,一个 PIR 运动传感器 适用于本文的 Github 存储库 如果您是一位精明的 Bluemix 开发人员,您可能只想看看如何在 node.js 中与 IoT 建立连接,或者只想了解如何从此 github 存储库中拉取我的代码. git clone https://github.com/nicolefinnie/iot-nodejs-tutorial 以下是实现与 IBM IoT 平台连接在一起的 4 个 R

Word 2016问题导致无法创建其他博客账号

兴致冲冲的申请了cnblog,本打算用OneNote直接创建分享,结果却遇到了这样的问题: 搜了半天,终于在Microsoft Community上找到了相关问题: https://answers.microsoft.com/zh-hans/msoffice/forum/msoffice_word-mso_win10/更新offices/b0f47f10-fd19-4de4-aad3-87a64ecc60fe 大概疑似更新Offices 补丁KB3127986后,Word 2016 无法创建其他

Word 2016中摄氏度符号℃怎么打出来

Word 2016中摄氏度符号℃怎么打出来1.单击"插入"选项卡,选择"符号"选项组里的"其它符号"选项"2.在"符号"选项中的"子集中选择"类似字母的符号"或者在"字符代码"中直接填入"2103" 原文地址:http://blog.51cto.com/2226547009/2169959

3.Word 2016中屏幕提示翻译的使用方法

屏幕提示翻译是Word 2016一个很有特点的功能,在文档中,用户并不需要开启"信息检索"窗格,可以直接使用屏幕提示来获得译文,同时还能够获得该单词的语音朗读.下面介绍Word 2016中屏幕提示翻译的具体操作方法. 操作步骤 1.启动Word 2016并打开文档,在"审阅"选项卡的"语音"组中单击"翻译"按钮,在打开的下拉列表中选择"选择转换语言"选项,如图1所示.2.打开"翻译语言选项&quo