abap导出word
如何导入和导出数据到WORD文档
如何导入和导出数据到WORD文档Word文档作为一种常见的办公工具,在日常工作和学习中扮演着重要的角色。
为了更好地组织和处理数据,将数据导入和导出到Word 文档是一项必备的技能。
本文将介绍几种常用的方法来实现数据的导入和导出,旨在帮助读者高效地处理数据并提高工作效率。
一、导入数据到Word文档1. 复制粘贴复制粘贴是最简单、最常见的将数据导入到Word文档的方法。
只需选中目标数据,按下Ctrl+C复制,然后在Word文档中将光标定位到想要插入数据的位置,按下Ctrl+V进行粘贴即可。
该方法适用于纯文本或简单格式的数据。
2. 插入对象如果要导入的数据包含复杂的表格、图表或嵌入对象等,可使用插入对象功能。
在Word文档中,选择“插入”选项卡,然后点击“对象”按钮,在弹出的对话框中选择要插入的对象类型,并按照提示操作即可将数据导入到Word文档中。
3. 数据连接数据连接是一种更加高级的方法,它可以实时更新数据,并保持数据与原始源的同步。
在Word文档中,选择“数据”选项卡,然后点击“来自其他源”按钮,选择相应的数据源,在数据源对话框中配置连接参数,并将数据导入到Word文档中。
这种方法适用于需要频繁更新和管理数据的场景。
二、导出数据到Word文档1. 导出表格如果你正在使用Excel或其他表格软件,可以将表格直接导出到Word文档中。
在表格软件中,选择目标表格,点击“复制”或使用快捷键Ctrl+C进行复制,在Word文档中按下Ctrl+V进行粘贴,目标表格将被自动粘贴到Word文档中。
这种方法适用于保留表格格式和公式的导出需求。
2. 导出报告将数据导出为报告是一种常见的需求。
在数据处理软件中,根据需要生成报告,并将报告以PDF、HTML等格式导出。
然后,在Word文档中选择“插入”选项卡,点击“对象”按钮,在弹出的对话框中选择相应的报告文件,并将其插入到Word文档中。
这种方法适用于需要将科研数据、市场调研报告等数据导入到Word文档中进行进一步整理和编辑。
ABAP中文帮助WORD版
BC ABAP/4 用户指南读者注意事项ABAP/4用户指南是关于ABAP/4编程语言的手册。
其目的在于:➢向新的ABAP/4程序员提供从基本语言组件到复杂报表和事务编码的全面指导➢向资深ABAP/4程序员提供解决特殊问题的参考方案为满足这些需求,特提供一个整体概述并将本指南分成三个部分,循序渐进,逐步深入:➢ABAP/4的基本组件➢如何编写报表程序➢如何编写事务ABAP/4用户指南目的不在于替换ABAP/4关键字文档。
APAP/4的关键字文档可以通过如下方式调用➢从“ABAP/4编辑器:初始屏幕”(事务SE38)中选择“实用程序->ABAP/4关键字文档➢选择ABAP/4编辑器中的“帮助”➢将光标放在ABAP/4编辑器中的关键字上,然后按下F1键ABAP/4用户指南的真正目的在于说明如何使用以及为何使用ABAP/4关键字。
并为此提供了许多示例,构成用户自己测试程序的基础。
要获取详细信息,可以进行以下某种操作:➢关于关键字的详细信息,请参阅关键字文档。
➢关于ABAP/4环境术语的详细信息,请从“ABAP/4编辑器:初始屏幕”(事务SE38)中选择“实用程序->ABAP/4关键字文档”。
然后就会出现与解释文本相链接的主题层次。
要找出这些文本用于哪些主题,请选择“查看->标题和关键字”。
屏幕右侧就会出现一个名称列表。
对于所有以ABEN而非TITL开头的名称,如果双击树结构中的主题,则会出现文本屏幕。
➢关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试->运行时间分析”,然后单击“提示和技巧”。
类型样式用途屏幕文本屏幕上能见到的的词或字符(包括系统信息、字段名、屏幕标题、菜单名和菜单条目)。
用户输入实际用户输入。
用户在键盘上键入的文字或字符。
<可变用户输入> 可变用户输入。
尖括号表明可以用适当的输入替换这些变量。
全部大写报表名、程序名、事务代码、表名、ABAP/4语言元素、文件名和目录。
简单快速导出word文档
简单快速导出word⽂档最近,我写公司项⽬word导出功能,应该只有2⼩时的⼯作量,却被硬⽣⽣的拉长2天,项⽬上线到业务正常运⾏也被拉长到2个星期。
为什么如此浪费时间呢?1)公司的项⽬⽐较⽼,采⽤硬编码模式,意味着word改⼀个字就要发布⼀次代码。
发布检验就浪时间了。
2)由于硬编码,采⽤的是<html>这种格式,⼿写代码⽐较废时,⽽且编写表格时会遇到单元格字数变多被撑⼤,表格变形的情况。
表格长度需要⼈⼯计算。
这类意想不到的问题。
3)公司测试库数据不全,测试库数据⽆法全⾯覆盖线上环境。
这⼜拉长了检验时间。
4)项⽬分⽀被正在开发的分⽀合并了,⼀下⼦被拉长了4天。
这简单功能浪费太多时间了,我在⽹上搜了⼀下word导出的⽅案:第⼀种:硬编码,就是公司的⽅案,问题太多了不⽤考虑。
第⼆种:通过Sql查询数据,存⼊字典,再通过第三⽅组件替换word的⽂字。
这种⽅案,简单容操作,sql查询可以换成存储过程,也存在缺点,1)存储过程要写提很细,逻辑算法都写在存储过程,存储过程可能变得很复杂。
2)不⽀持表格内插⼊多条数据。
第三种:通过Sql查询数据,使⽤Razor模板引擎⽣成word。
这种⽅案解决了存储过程复杂问题,但Razor模板内使⽤<html>这种格式,所以写模板时很⿇烦。
第四种:通过Sql查询数据,存⼊字典,再通过第三⽅组件替换word的域。
这种⽅案与第⼆种⽅案类似,对我个⼈来说,我不喜欢修改域。
但是,我想要⼀个简单、容易控制、表格内能插⼊多条数据、可商⽤的⽅案。
简单:类似第⼆种⽅案,数据存⼊字典,循环替换word的⽂字,存储过程可以写得简单。
容易控制:模板不能使⽤<html>这种格式,最好能⽤office直接控制表格⽂字⼤⼩、颜⾊。
表格内能插⼊多条数据:我写的组件内必须有索引。
可商⽤:拒绝商⽤组件。
经过⼏天琢磨,我找到可⾏的⽅案:存储过程+模板+算法可控依赖组件:DocumentFormat.OpenXml,微软官⽅开源组件,⽀持docx⽂件,MIT协议。
用OLE DOI 实现ABAP导出EXCEL表格
OLE导出:sap中abap 导出excel的方法很多,ole是其中一种,但其导出速度比较慢,一般只应用于对excel格式有特别要求的场所REPORT YGL_MYOLE.INCLUDE OLE2INCL.* OLE OBJECTDA TA:MYEXCEL TYPE OLE2_OBJECT,MYSHEET TYPE OLE2_OBJECT,MYCELL TYPE OLE2_OBJECT,MYWORKBOOK TYPE OLE2_OBJECT. .................................*创建excel进程CREATE OBJECT MYEXCEL 'EXCEL.APPLICATION'.* 创建工作表CALL METHOD OF MYEXCEL 'WORKBOOKS' = MYWORKBOOK.* 创建sheet并添加到工作表SET PROPERTY OF MYEXCEL 'SHEETSINNEWWORKBOOK' = 1.CALL METHOD OF MYWORKBOOK 'ADD'.* 选中excel中的cell,第一行的第二列。
CALL METHOD OF MYEXCEL 'CELLS' = MYCELL EXPORTING #1 = 1 #2 = 2.* 设置被选中的cell的值SET PROTERTY OF MYCELL 'V ALUE' = 'HELLO WORD'. "你要输出的内容GET PROPERTY OF MYEXCEL 'ACTIVESHEET' = MYSHEET.GET PROPERTY OF MYEXCEL 'ACTIVEWORKBOOK' = MYWORKBOOK.* 保存文件CALL METHOD OF MYWORKBOOK 'SAVEAS' EXPORTING #1 = 'C:\TMP\AA.XLS' #2 = 1. CALL METHOD OF MYWORKBOOK 'CLOSE'.* 退出excelCALL METHOD OF MYEXCEL 'QUIT'.* 释放对象FREE OBJECT MYSHEET.FREE OBJECT MYWORKBOOK.FREE OBJECT MYEXCEL.******************************************************************************* 实例:TYPE -POOLS: ole2,slis.DEFINE add_field.wa_field-fieldname = &1 .wa_field-reptext_ddic = &2 .wa_field-no_zero = 'X' . "去掉0* WA_FIELD_EIDT = 'X'.append wa_field to it_field.END -OF -DEFINITION .* 定义变量和字段组DA TA : g_repid TYPE sy-repid,gs_layout TYPE slis_layout_alv,wa_field TYPE slis_fieldcat_alv,it_field TYPE slis_t_fieldcat_alv.******************************************************************************** OLE EXCEL变量DA TA : excel TYPE ole2_object,workbook TYPE ole2_object,sheet TYPE ole2_object,cell TYPE ole2_object.* CELL1 TYPE OLE2_OBJECT,* COLUMN TYPE OLE2_OBJECT,* RANGE TYPE OLE2_OBJECT,* BORDERS TYPE OLE2_OBJECT,* button TYPE OLE2_OBJECT,* int TYPE OLE2_OBJECT,* FONT TYPE OLE2_OBJECT.* ROW TYPE OLE2_OBJECT.* 填充单元格FORM fill_cell USING i j val.* CALL METHOD OF EXCEL 'COLUMNS' = COLUMN.* CALL METHOD OF COLUMN 'AUTOFIT'. "导出EXCEL自动适应宽度CALL METHOD OF excel 'CELLS' = cell NO FLUSH EXPORTING #1 = i #2 = j.SET PROPERTY OF cell 'V ALUE' = val no flush.FREE OBJECT cell NO FLUSH.* GET PROPERTY OF CELL 'FONT' = FONT.* SET PROPERTY OF FONT 'BOLD' = BOLD .ENDFORM . "FILL_CELL* 处理进度条FORM p_process USING i_processed LIKE sy-tabixi_total LIKE sy-tabix.DATA :i_percent TYPE i ,i_text2(72 ) TYPE c ,i_times TYPE i ,i_proc(10 ) TYPE c .i_times = 0 .i_percent = ( i_processed * 100 ) DIV i_total.i_times = ( i_percent - STRLEN ( i_proc ) ) DIV 10 .DO i_times TIMES .CONCATENATE i_proc '■' INTO i_proc.CONDENSE i_proc.ENDDO .IF i_percent > 0 .WRITE i_percent TO i_text2.CONDENSE i_text2.CONCATENATE i_text2 '%' i_proc INTO i_text2.ENDIF .CONCATENATE '正在导出EXCEL,目前的进度为' i_text2 INTO i_text2 SEPARATED BY space. "合并文本CONDENSE i_text2. "缩进文本* 启动指示钟CALL FUNCTION 'SAPGUI_PROGRESS_INDICA TOR'EXPORTING* PERCENTAGE = I_PERCENTtext = i_text2EXCEPTIONSOTHERS = 1.ENDFORM . "P_PROCESSDOI:推荐用DOI方式导数据到Excel,而不要用OLE,DOI是调用SAP自带的类来操作的,可控性更高,并且可以把Excel窗口当作一个片屏幕控件放入屏幕的容器中。
SAP-ABAP-HR批量上传-删除文件-图片-PDF-WORD等
通过一个文件夹批量上传文件,图片,PDF,WORd等,当同一个文件名的文档类型及业务对象相同时,删除旧文件。
上传的文件名为8位,文件名=员工号输入屏幕输出屏幕*&---------------------------------------------------------------------**&Report ZRPT_HR_PA001**&**&---------------------------------------------------------------------**&Program ID:<ZRPT_HR_PA001>**&Program Name:<批量上传人员的电子文档>**&---------------------------------------------------------------------* REPORT ZRPT_HR_PA001. INCLUDE ZRPT_HR_PA001_TOP.*---------------------------------------------------------------------**AT SELECTION-SCREEN*---------------------------------------------------------------------*AT SELECTION-SCREEN.*屏幕输入正确性判断PERFORM PER_CHECK_SCREEN.AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_WQJ."上传路径*取出上传路径PERFORM PER_GET_P_WQJ.*---------------------------------------------------------------------**START-OF-SELECTION*---------------------------------------------------------------------* START-OF-SELECTION.*取出所选文件夹数据PERFORM PER_GET_WQJ.*上传文件PERFORM PER_UPLOAD_DATA.*ALV输出PERFORM PER_ALV_OUT.END-OF-SELECTION.INCLUDE ZRPT_HR_PA001_FORM.*&---------------------------------------------------------------------**&包括ZRPT_HR_PA001_TOP**&---------------------------------------------------------------------*TABLES:TOAOM,"业务对象TOADV,"文档类型PA0001,"员工主数据TOAHR."文档类型*类型池定义TYPE-POOLS:SLIS.DATA:G_PATH TYPE STRING,"G_FILTER TYPE STRING,"文件类型G_WQLX LIKE TOADD-DOC_TYPE,"文件类型G_COUNT TYPE I,G_FILENAME(40)TYPE C,G_FILEEXT(10)TYPE C,G_LEN TYPE I,G_SAPOBJID LIKE SAPB-SAPOBJID,"上传照片文件名G_SAPPFAD LIKE SAPB-SAPPFAD,"上传路径G_NUM(10)TYPE I,G_FILE_NAME LIKE RLGRAP-FILENAME."SAP文件路径*文件夹内容DATA:TAB_G_FILETAB TYPE TABLE OF FILE_INFO WITH HEADER LINE.DATA:TAB_G_TOAHR TYPE TOAHR.*上传成功后得到的员工编号IDDATA:BEGIN OF TAB_G_TOAV0OCCURS1.INCLUDE STRUCTURE TOAV0.DATA:END OF TAB_G_TOAV0.*ALV输出DATA:BEGIN OF TAB_G_ALVOUT OCCURS0.INCLUDE STRUCTURE ZHR_LOG_PA001.DATA:END OF TAB_G_ALVOUT.*ALV定义DATA:G_ALV_FIELD TYPE SLIS_FIELDCAT_ALV,G_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,G_LAYOUT TYPE SLIS_LAYOUT_ALV.*---------------------------------------------------------------------**SELECTION-SCREEN*---------------------------------------------------------------------*PARAMETERS:P_YWDX LIKE TOAV0-AR_OBJECT DEFAULT'PREL'OBLIGATORY,"业务对象P_WDLX LIKE TOADV-AR_OBJECT OBLIGATORY,"文档类型P_WQJ LIKE RLGRAP-FILENAME OBLIGATORY,"上传路径P_ZHF AS CHECKBOX."可重复*&---------------------------------------------------------------------**&包括ZRPT_HR_PA001_FORM**&---------------------------------------------------------------------**&---------------------------------------------------------------------**&Form PER_CHECK_SCREEN*&---------------------------------------------------------------------**text*----------------------------------------------------------------------* *-->p1text*<--p2text*----------------------------------------------------------------------* FORM PER_CHECK_SCREEN.*业务对象判断正确性CHECK P_YWDX IS NOT INITIAL.SELECT SINGLE*FROM TOAOMWHERE SAP_OBJECT=P_YWDX.IF SY-SUBRC<>0.MESSAGE'无此业务对象'TYPE'E'.EXIT.ENDIF.*文档类型判断正确性CHECK P_WDLX IS NOT INITIAL.CLEAR:G_WQLX.SELECT SINGLE DOC_TYPEFROM TOADVINTO G_WQLXWHERE AR_OBJECT=P_WDLX.IF SY-SUBRC<>0.MESSAGE'无此文档类型'TYPE'E'.EXIT.ENDIF.ENDFORM."PER_CHECK_SCREEN*&---------------------------------------------------------------------**&Form PER_GET_P_WQJ*&---------------------------------------------------------------------**读取文件夹*----------------------------------------------------------------------**-->p1text*<--p2text*----------------------------------------------------------------------*FORM PER_GET_P_WQJ.*读取文件夹CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE EXPORTINGWINDOW_TITLE='File Directory'INITIAL_FOLDER='C:\'CHANGINGSELECTED_FOLDER=G_PATH.CALL METHOD CL_GUI_CFW=>FLUSH.CONCATENATE G_PATH''INTO P_WQJ.ENDFORM."PER_GET_P_WQJ*&---------------------------------------------------------------------**&Form PER_GET_WQJ*&---------------------------------------------------------------------**读取文件夹内容*----------------------------------------------------------------------**-->p1text*<--p2text*----------------------------------------------------------------------*FORM PER_GET_WQJ.*读取文件夹内容CLEAR:TAB_G_FILETAB,TAB_G_FILETAB[],G_FILTER.*文件夹路径G_PATH=P_WQJ.*读取文件类型CONCATENATE'*.'G_WQLX INTO G_FILTER.*取出文件夹数据CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES EXPORTINGDIRECTORY=G_PATH"文件夹路径FILTER=G_FILTER"文件类型'*.jpg' CHANGINGFILE_TABLE=TAB_G_FILETAB[]"输入文件COUNT=G_COUNTEXCEPTIONSCNTL_ERROR= 1DIRECTORY_LIST_FILES_FAILED= 2WRONG_PARAMETER= 3ERROR_NO_GUI= 4NOT_SUPPORTED_BY_GUI= 5OTHERS= 6.*判断文件的长度LOOP AT TAB_G_FILETAB.SPLIT TAB_G_FILETAB-FILENAME AT'.'INTO G_FILENAME G_FILEEXT.G_LEN=STRLEN(G_FILENAME).IF G_LEN<>8.MESSAGE E000(OO)WITH'文件名长度必须等于8位'.ENDIF.ENDLOOP.ENDFORM."PER_GET_WQJ*&---------------------------------------------------------------------* *&Form PER_UPLOAD_DATA*&---------------------------------------------------------------------* *text*----------------------------------------------------------------------* *-->p1text*<--p2text*----------------------------------------------------------------------* FORM PER_UPLOAD_DATA.CLEAR:TAB_G_ALVOUT,TAB_G_ALVOUT[].LOOP AT TAB_G_FILETAB.*自动分配流水号CALL FUNCTION'QF05_RANDOM_INTEGER'EXPORTINGRAN_INT_MAX=99999999RAN_INT_MIN= 1IMPORTINGRAN_INT=G_NUMEXCEPTIONSINVALID_INPUT= 1OTHERS= 2.TAB_G_ALVOUT-ZHRSORT=G_NUM.*判断是否有此员工号SELECT SINGLE*FROM PA0001WHERE PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号IF SY-SUBRC=0.*上传路径CONCATENATE G_PATH'\'TAB_G_FILETAB-FILENAME INTO G_SAPPFAD. *上传照片编号CONCATENATE TAB_G_FILETAB-FILENAME+0(8)'0002'INTO G_SAPOBJID. *判断是否可以重复上传IF P_ZHF=''.*判断员工文档类型是否已存在CLEAR:TAB_G_TOAHR.SELECT SINGLE*FROM TOAHRINTO TAB_G_TOAHRWHERE OBJECT_ID=G_SAPOBJID"照片号AND AR_OBJECT=P_WDLX"文档类型AND SAP_OBJECT=P_YWDX."业务对象IF SY-SUBRC=0.TAB_G_ALVOUT-MANDT=SY-MANDT."集团TAB_G_ALVOUT-ZHRUNAME=SY-UNAME."创建人TAB_G_ALVOUT-ZHRDATUM=SY-DATUM."创建日期TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT."创建日间TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号TAB_G_ALVOUT-ZHRYWDX=P_YWDX."文档对象TAB_G_ALVOUT-ZHRWDLX=P_WDLX."文档类型TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD."上传路径TAB_G_ALVOUT-ZHRMSGTY='已存在'.APPEND TAB_G_ALVOUT.CLEAR:TAB_G_ALVOUT.CONTINUE.ENDIF.ENDIF.*上传照片CLEAR:TAB_G_TOAV0,TAB_G_TOAV0[].CALL FUNCTION'ZFUN_HR_ARCHIV_CREATE_FILE'EXPORTINGAR_OBJECT=P_WDLX"文档类型OBJECT_ID=G_SAPOBJID"照片SAP_OBJECT=P_YWDX"业务对象DOC_TYPE=G_WQLX"文件类型PATH=G_SAPPFAD"上传路径TABLESTOAV0=TAB_G_TOAV0"输出ID EXCEPTIONSERROR_CONECTIONTABLE= 1ERROR_PARAMETER= 2ERROR_ARCHIV= 3ERROR_UPLOAD= 4ERROR_KERNEL= 5NO_ENTRY_POSSIBLE= 6ERROR_COMUNICATIONTABLE=7OTHERS=8.IF SY-SUBRC<>0.*上传照片失败CALL FUNCTION'MESSAGE_TEXT_BUILD'EXPORTINGMSGID=SY-MSGIDMSGNR=SY-MSGTYMSGV1=SY-MSGV1MSGV2=SY-MSGV2MSGV3=SY-MSGV3MSGV4=SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT=TAB_G_ALVOUT-ZHRMSGTY.TAB_G_ALVOUT-MANDT=SY-MANDT."集团TAB_G_ALVOUT-ZHRUNAME=SY-UNAME."创建人TAB_G_ALVOUT-ZHRDATUM=SY-DATUM."创建日期TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT."创建日间TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号TAB_G_ALVOUT-ZHRYWDX=P_YWDX."业务对象TAB_G_ALVOUT-ZHRWDLX=P_WDLX."文档类型TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD."上传路径TAB_G_ALVOUT-ZHRMESSAGE='E'.CONCATENATE TAB_G_ALVOUT-ZHRMSGTY'存储上传失败'INTO TAB_G_ALVOUT-ZHRMSGTY.APPEND TAB_G_ALVOUT.ELSE.*上传成功TAB_G_ALVOUT-MANDT=SY-MANDT."集团TAB_G_ALVOUT-ZHRUNAME=SY-UNAME."创建人TAB_G_ALVOUT-ZHRDATUM=SY-DATUM."创建日期TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT."创建日间TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号READ TABLE TAB_G_TOAV0INDEX 1.TAB_G_ALVOUT-ZHRID=TAB_G_TOAV0-ARC_DOC_ID."ID号TAB_G_ALVOUT-ZHRYWDX=P_YWDX."业务对象TAB_G_ALVOUT-ZHRWDLX=P_WDLX."文档类型TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD."上传路径TAB_G_ALVOUT-ZHRMESSAGE='S'.TAB_G_ALVOUT-ZHRMSGTY='成功'.APPEND TAB_G_ALVOUT.*取出同一类型不同ID文档CLEAR:TAB_G_TOAHR.SELECT SINGLE*FROM TOAHRINTO TAB_G_TOAHRWHERE OBJECT_ID=G_SAPOBJID"照片号AND AR_OBJECT=P_WDLX"文档类型AND SAP_OBJECT=P_YWDX"业务对象AND ARC_DOC_ID<>TAB_G_ALVOUT-ZHRID."ID文档IF SY-SUBRC=0.*当取出同一类型不同ID文档进行删除CLEAR:G_FILE_NAME.CALL FUNCTION'ARCHIV_DELETE_META'EXPORTINGARCHIV_ID=TAB_G_TOAHR-ARCHIV_ID"内容存储库标识ARC_DOC_ID=TAB_G_TOAHR-ARC_DOC _ID"ID文档AR_OBJECT=P_WDLX"文档类型DELETE_FLAG='3'"删除时是否输出对画,3代表不输出,0代表输出OBJECT_ID=G_SAPOBJID"员工编号+0002文件SAP_OBJECT=P_YWDX"业务对象CLIENT=SY-MANDT"集团DOCUMENTCLASS=G_WQLX"文件类型EXCEPTIONSERROR_CONNECTIONTABLE= 1ERROR_PARAMETER= 2ERROR_ARCHIV= 3ERROR_KERNEL= 4ERROR_COMMUNICATIONTABLE= 5OTHERS= 6.IF SY-SUBRC<>0.*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.ENDIF.ENDIF.ENDIF.ELSE.*此员工编号不存在TAB_G_ALVOUT-MANDT=SY-MANDT.TAB_G_ALVOUT-ZHRUNAME=SY-UNAME.TAB_G_ALVOUT-ZHRDATUM=SY-DATUM.TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT.TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8).TAB_G_ALVOUT-ZHRYWDX=P_YWDX.TAB_G_ALVOUT-ZHRWDLX=P_WDLX.TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD.TAB_G_ALVOUT-ZHRMSGTY='此员工编号不存在!'.TAB_G_ALVOUT-ZHRMESSAGE='E'.APPEND TAB_G_ALVOUT.ENDIF.CLEAR:TAB_G_ALVOUT.ENDLOOP.INSERT ZHR_LOG_PA001FROM TABLE TAB_G_ALVOUT. ENDFORM."PER_UPLOAD_DATA*&---------------------------------------------------------------------**&Form PER_ALV_OUT*&---------------------------------------------------------------------* *text*----------------------------------------------------------------------* *-->p1text*<--p2text*----------------------------------------------------------------------* FORM PER_ALV_OUT.REFRESH:G_ALV_FIELDCAT.G_ALV_FIELD-FIELDNAME='ZHRUNAME'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='操作人'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT.CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRDATUM'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='操作日期'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT.CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRUZEIT'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='操作时间'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRSORT'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='序号'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='PERNR'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='员工号'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRMESSAGE'. G_ALV_FIELD-SELTEXT_L='消息类型'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRMSGTY'. G_ALV_FIELD-SELTEXT_L='消息文本'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRYWDX'.G_ALV_FIELD-SELTEXT_L='业务对象'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRWDLX'.G_ALV_FIELD-SELTEXT_L='文档类型'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRID'.G_ALV_FIELD-SELTEXT_L='对象标识符'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRWQJ'.G_ALV_FIELD-SELTEXT_L='文件名'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT.CLEAR:G_ALV_FIELD.G_LAYOUT-COLWIDTH_OPTIMIZE='X'.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGI_CALLBACK_PROGRAM=SY-REPIDIS_LAYOUT=G_LAYOUTIT_FIELDCAT=G_ALV_FIELDCAT[]*I_SAVE=G_SAVE*IS_VARIANT=GS_VERIANT*I_CALLBACK_USER_COMMAND='USER_COMMAND' *I_CALLBACK_PF_STATUS_SET='FRM_PF_STATUS_SET' TABLEST_OUTTAB=TAB_G_ALVOUT[]."输出表ENDFORM."PER_ALV_OUTZFUN_HR_ARCHIV_CREATE_FILEFUNCTION ZFUN_HR_ARCHIV_CREATE_FILE.*"--------------------------------------------------------------------*"*"本地接口:*"IMPORTING*"VALUE(AR_OBJECT)LIKE TOAOM-AR_OBJECT *"VALUE(DEL_DATE)LIKE TOA01-DEL_DATE OPTIONAL *"VALUE(OBJECT_ID)LIKE SAPB-SAPOBJID *"VALUE(SAP_OBJECT)LIKE TOAOM-SAP_OBJECT *"VALUE(DOC_TYPE)LIKE TOADD-DOC_TYPE *"VALUE(PATH)LIKE SAPB-SAPPFAD*"TABLES*"TOAV0STRUCTURE TOAV0OPTIONAL *"EXCEPTIONS*"ERROR_CONECTIONTABLE*"ERROR_PARAMETER*"ERROR_ARCHIV*"ERROR_UPLOAD*"ERROR_KERNEL*"NO_ENTRY_POSSIBLE*"ERROR_COMUNICATIONTABLE *"OTHERS*"--------------------------------------------------------------------DATA:BEGIN OF I_TOAOM OCCURS 1.INCLUDE STRUCTURE TOAOM.DATA:END OF I_TOAOM.DATA:BEGIN OF I_TOAV0OCCURS 1.INCLUDE STRUCTURE TOAV0.DATA:END OF I_TOAV0.REFRESH I_TOAOM.I_TOAV0-MANDT=SY-MANDT.I_TOAV0-SAP_OBJECT=SAP_OBJECT.I_TOAV0-OBJECT_ID=OBJECT_ID.I_TOAV0-AR_OBJECT=AR_OBJECT.I_TOAV0-AR_DATE=SY-DATUM.I_TOAV0-DEL_DATE=DEL_DATE.I_TOAV0-RESERVE=DOC_TYPE.**Ermittle Verkn黳fungsinformation*CALL FUNCTION'ARCHIV_METAINFO_GET'EXPORTINGACTIVE_FLAG='X'AR_OBJECT=AR_OBJECTSAP_OBJECT=SAP_OBJECTTABLESTOAOM_FKT=I_TOAOMEXCEPTIONSERROR_CONNECTIONTABLE= 1ERROR_PARAMETER= 2OTHERS= 3.CASE SY-SUBRC.WHEN 1.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_CONECTIONTABLE.WHEN 2.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_PARAMETER.WHEN 3.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING OTHERS.ENDCASE.I_TOAV0-ARCHIV_ID=I_TOAOM-ARCHIV_ID.**archiviere die Datei*CALL FUNCTION'ARCHIVOBJECT_CREATE_FILE'EXPORTINGARCHIV_ID=I_TOAOM-ARCHIV_IDDOCUMENT_TYPE=DOC_TYPEPATH=PATHIMPORTINGARCHIV_DOC_ID=I_TOAV0-ARC_DOC_ID EXCEPTIONSERROR_ARCHIV= 1ERROR_COMMUNICATIONTABLE= 2ERROR_UPLOAD= 3ERROR_KERNEL= 4OTHERS= 5.CASE SY-SUBRC.WHEN 1.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_ARCHIV.WHEN 2.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_COMUNICATIONTABLE.WHEN 3.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_UPLOAD.WHEN 4.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_KERNEL.WHEN 5.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING OTHERS.ENDCASE.**schreibe Verkn黳fung*APPEND I_TOAV0.CALL FUNCTION'ARCHIV_CONNECTIONTABLE_INSERT'TABLESENTRYS_CONNECTIONTABLE=I_TOAV0EXCEPTIONSNO_ENTRY_POSSIBLE= 1OTHERS= 2.CASE SY-SUBRC.WHEN 1.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING NO_ENTRY_POSSIBLE.WHEN 2.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING OTHERS.ENDCASE.CLEAR:TOAV0,TOAV0[].APPEND LINES OF I_TOAV0TO TOAV0. ENDFUNCTION.。
ABAP-通过OLE操作OFFICE
ABAP--通过OLE操作OFFICE(代码)本代码是通过OLE技术操作EXCEL,将SAP的数据填写到本地EXCEL中,Office 运行在SAP的GUI界面外,注意红色代码。
REPORT ZRSDEMO01 NO STANDARD PAGE HEADING.* this report demonstrates how to send some ABAP data to an* EXCEL sheet using OLE automation.*必须包含INCLUDE OLE2INCL.* handles for OLE objects*申明相关的OFFICE的OLE对象DATA: H_EXCEL TYPE OLE2_OBJECT, " Excel objectH_MAPL TYPE OLE2_OBJECT, " list of workbooksH_MAP TYPE OLE2_OBJECT, " workbookH_ZL TYPE OLE2_OBJECT, " cellH_F TYPE OLE2_OBJECT. " fontTABLES: SPFLI.DATA H TYPE I.* table of flightsDATA: IT_SPFLI LIKE SPFLI OCCURS 10 WITH HEADER LINE.*&---------------------------------------------------------------------**& Event START-OF-SELECTION*&---------------------------------------------------------------------*START-OF-SELECTION.* read flightsSELECT * FROM SPFLI INTO TABLE IT_SPFLI UP TO 10 ROWS.* tell user what is going onCALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTING* PERCENTAGE = 0TEXT = TEXT-007EXCEPTIONSOTHERS = 1.* start Excel(创建对象)CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.PERFORM ERR_HDL.*设置office对象是否显示SET PROPERTY OF H_EXCEL 'Visible' = 1.PERFORM ERR_HDL.* tell user what is going onCALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING* PERCENTAGE = 0TEXT = TEXT-008EXCEPTIONSOTHERS = 1.* get list of workbooks, initially emptyCALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL. PERFORM ERR_HDL.* add a new workbookCALL METHOD OF H_MAPL 'Add' = H_MAP.PERFORM ERR_HDL.* tell user what is going onCALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING* PERCENTAGE = 0TEXT = TEXT-009EXCEPTIONSOTHERS = 1.* output column headings to active Excel sheetPERFORM FILL_CELL USING 1 1 1 'Flug'(001). PERFORM FILL_CELL USING 1 2 1 'Nr'(002).PERFORM FILL_CELL USING 1 3 1 'Von'(003). PERFORM FILL_CELL USING 1 4 1 'Nach'(004). PERFORM FILL_CELL USING 1 5 1 'Zeit'(005).LOOP AT IT_SPFLI.* copy flights to active EXCEL sheetH = SY-TABIX + 1.PERFORM FILL_CELL USING H 1 0 IT_SPFLI-CARRID. PERFORM FILL_CELL USING H 2 0 IT_SPFLI-CONNID. PERFORM FILL_CELL USING H 3 0 IT_SPFLI-CITYFROM. PERFORM FILL_CELL USING H 4 0 IT_SPFLI-CITYTO. PERFORM FILL_CELL USING H 5 0 IT_SPFLI-DEPTIME. ENDLOOP.* disconnect from Excel*CALL METHOD OF H_EXCEL 'QUIT'.FREE OBJECT H_EXCEL.PERFORM ERR_HDL.*---------------------------------------------------------------------** FORM FILL_CELL **---------------------------------------------------------------------** sets cell at coordinates i,j to value val boldtype bold **---------------------------------------------------------------------*FORM FILL_CELL USING I J BOLD VAL.*get cellCALL METHOD OF H_EXCEL 'Cells' = H_ZL EXPORTING #1 = I #2 = J. PERFORM ERR_HDL.*set cell valueSET PROPERTY OF H_ZL 'Value' = VAL .PERFORM ERR_HDL.*Get cell fontGET PROPERTY OF H_ZL 'Font' = H_F.PERFORM ERR_HDL.*set cell fontSET PROPERTY OF H_F 'Bold' = BOLD .PERFORM ERR_HDL.ENDFORM.*&---------------------------------------------------------------------**& Form ERR_HDL*&---------------------------------------------------------------------** outputs OLE error if any **----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM ERR_HDL.IF SY-SUBRC <> 0.WRITE: / 'Fehler bei OLE-Automation:'(010), SY-SUBRC.STOP.ENDIF.ENDFORM. " ERR_HDL。
java导出word的6种方式(复制来的文章)
java导出word的6种⽅式(复制来的⽂章)来⾃:最近做的项⽬,需要将⼀些信息导出到word中。
在⽹上找了好多解决⽅案,现在将这⼏天的总结分享⼀下。
⽬前来看,java导出word⼤致有6种解决⽅案:1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建⼀座桥梁。
使⽤Jacob⾃带的DLL动态链接库,并通过JNI的⽅式实现了在Java平台上对COM程序的调⽤。
DLL动态链接库的⽣成需要windows平台的⽀持。
该⽅案只能在windows平台实现,是其局限性。
2:Apache POI包括⼀系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式⽂件,可以通过这些API在Java中读写Excel、Word等⽂件。
他的excel处理很强⼤,对于word还局限于读取,⽬前只能实现⼀些简单⽂件的操作,不能设置样式。
3:Java2word是⼀个在java程序中调⽤ MS Office Word ⽂档的组件(类库)。
该组件提供了⼀组简单的接⼝,以便java程序调⽤他的服务操作Word ⽂档。
这些服务包括:打开⽂档、新建⽂档、查找⽂字、替换⽂字,插⼊⽂字、插⼊图⽚、插⼊表格,在书签处插⼊⽂字、插⼊图⽚、插⼊表格等。
填充数据到表格中读取表格数据,1.1版增强的功能:指定⽂本样式,指定表格样式。
如此,则可动态排版word⽂档。
是⼀种不错的解决⽅案。
4:iText是著名的开放源码的站点sourceforge⼀个项⽬,是⽤于⽣成PDF⽂档的⼀个java类库。
通过iText不仅可以⽣成PDF或rtf的⽂档,⽽且可以将XML、Html⽂件转化为PDF⽂件。
功能强⼤。
5:JSP输出样式,该⽅案实现简单,但是处理样式有点缺陷,简单的导出可以使⽤。
6:⽤XML做就很简单了。
Word从2003开始⽀持XML格式,⼤致的思路是先⽤office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后⽤java来解析FreeMarker模板并输出Doc。
用PageOffice实现批量转换导出Word文档
用PageOffice实现C# 批量转换导出Word文档在某些涉及到报表的项目开发中,可能经常会遇到需要批量的生成某些文档的操作,这些文档若是要点击一下,生成一个的话,就太浪费时间了。
但若用FileMakerCtrl控件来实现的话就简单容易的多了。
下面我就以批量转换10个Word文档为例来分享一下FileMakerCtrl控件的使用方法。
第一步:请先安装PageOffice的服务器端的安装程序,之后在你的网站或项目的根目录下添加pageoffice文件夹(在PageOffice官方网站的“下载中心”中可下载相应的压缩包,解压之后直接将PageOffice实例代码里的pageoffice文件夹拷贝到根目录下就可以了)。
第二步:在网站或项目中添加文件夹存放word模板文件,我习惯命名为“doc”,将要打开的文件拷贝到该文件夹下,我要转换的文件为“template.doc”,该文件中有一个书签,名称为“PO_company”。
第三步:在网站或项目中创建动态页面FileMaker.aspx。
在工具箱中拖动一个FileMakerCtrl控件到页面上(FileMakerCtrl控件位于工具箱最下方)。
在FileMaker.aspx.cs后台页面中,添加代码如下://设置服务器页面FileMakerCtrl1.ServerPage = "pageoffice/server.aspx";string id = Request.QueryString["id"];if (id != null&& id.Length > 0){PageOffice.WordWriter.WordDocument doc = newPageOffice.WordWriter.WordDocument();//禁用右击事件doc.DisableWindowRightClick = true;//给数据区域赋值,即把数据填充到模板中相应的位置doc.OpenDataRegion("PO_company").Value = "北京卓正志远软件有限公司" + id;//设置保存页面FileMakerCtrl1.SaveFilePage = "Savemaker.aspx?id=" + id;FileMakerCtrl1.SetWriter(doc);//设置转换完成后执行的JS函数FileMakerCtrl1.JsFunction_OnProgressComplete = "OnProgressComplete()";//打开文档FileMakerCtrl1.FillDocument(Server.MapPath("doc/template.doc"),PageOffice.DocumentOpenType.Word);}在前台添加JS函数OnProgressComplete()如下:function OnProgressComplete() {window.parent.myFunc(); //调用父页面(Default.aspx)的js函数}第四步:在网站或项目中创建动态页面SaveMaker.aspx,保存转换后的Word 文档到本地磁盘上,部分代码如下://定义FileSaver对象PageOffice.FileSaver fs = new PageOffice.FileSaver();string fileName = "maker" + id + fs.FileExtName;//将Word文档保存到本地磁盘上fs.SaveToFile(Server.MapPath("doc/") + fileName);fs.Close();第五步:在网站或项目中创建动态页面Default.aspx。
从sap自动导出数据的方法
在SAP系统中,有多种方法可以从系统中自动导出数据。
以下是一些常用的方法:
1.使用SAP GUI的导出功能:在SAP GUI中,可以打开所需报表,并使用
“导出”功能将数据导出到Excel、CSV或其他格式的文件中。
这种方法适用于较小的数据量。
2.使用ABAP语言编写程序:ABAP是SAP的编程语言,可以使用ABAP编
写程序从SAP系统中提取数据,并将其导出到Excel或其他格式的文件中。
这种方法需要具备一定的编程能力。
3.使用SAP Data Services:SAP Data Services是一个ETL工具,可以从
SAP系统中抽取、转换和加载数据到其他系统中。
通过使用SAP Data Services,可以将SAP数据导出到Excel、CSV或其他格式的文件中。
4.使用SAP Cloud Connector:如果您的数据存储在云端,可以使用SAP
Cloud Connector将数据从SAP系统导出到其他云服务中,例如Microsoft Azure、AWS等。
5.使用SAP Cloud Platform Integration:SAP Cloud Platform Integration
提供了数据集成功能,可以将SAP数据与其他系统进行集成和交换。
通过使用该功能,可以将SAP数据导出到Excel、CSV或其他格式的文件中。
无论您选择哪种方法,都应该确保导出的数据是准确的、完整的、安全可靠的,并且符合相关法律法规的要求。
ABAP程序完成EXCEL文件的导入导出
ABAP程序完成EXCEL文件的导入导出今天主要学习了使用微软的OLE技术,用ABAP程序完成excel 文件的导入导出处理。
(一)常用的OLE函数:CALL METHOD , CALL OBJECT , FREE OBJECT , GET PROPERTY , SET PROPERTY.设属性:SET PROPERTY OF <对象><属性> = <value>取属性:GET PROPERTY OF <对象><属性> = 变量调用方法:CALL METHOD OF <对象><METHOD><value> EXPORTING #<PARA> = <VALUE>.输出可以是多个参数。
释放对象是:FREE OBJECT<对象>.2.在程序中下载模板*下载EXCEL模板FORMFORM temp_excel_get.DATA: lo_objdata LIKE wwwdatatab,lo_mime LIKE w3mime,lc_filename TYPE string VALUE'test01' ,lc_fullpath TYPE string VALUE'D:\test\' ,lc_path TYPE string VALUE'D:\test\' ,ls_destination LIKE rlgrap-filename,ls_objnam TYPE string,li_rc LIKE sy-subrc,ls_errtxt TYPE string.DATA:p_objid TYPE wwwdatatab-objid,p_dest LIKE sapb-sappfad.p_objid = 'ZTEST.XLS'. “此处为EXCEL模板名称CALL METHOD cl_gui_frontend_services=>file_save_dialog ”调用保存对话框EXPORTINGdefault_extension = 'XLS'default_file_name = lc_filenameCHANGINGfilename = lc_filenamepath = lc_pathfullpath = lc_fullpathEXCEPTIONScntl_error = 1error_no_gui = 2not_supported_by_gui = 3OTHERS = 4.IF lc_fullpath = ''.MESSAGE '不能打开excel' TYPE 'E'.ENDIF.IF sy-subrc = 0.p_dest = lc_fullpath.* concatenate p_objid '.XLS' into ls_objnam.CONDENSE ls_objnam NO-GAPS.SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdataWHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.*检查表wwwdata中是否存在所指定的模板文件IF sy-subrc NE 0 OR lo_objdata-objid EQ space.“如果不存在,则给出错误提示CONCATENATE '模板文件' ls_objnam '不存在' INTO ls_errtxt.MESSAGE ls_errtxt TYPE 'I'.ENDIF.ls_destination = p_dest. ”保存路径*如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGkey = lo_objdatadestination = ls_destinationIMPORTINGrc = li_rc.IF li_rc NE 0.CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt.MESSAGE ls_errtxt TYPE 'E'.ENDIF.fname = ls_destination.ENDIF.ENDFORM. "fm_excel3.下载完模板后,打开模板文件,填入数据CREATE OBJECT excel 'EXCEL.APPLICATION'. "Create EXCEL OBJECTIF sy-subrc NE 0.EXIT.ENDIF.SET PROPERTY OF excel 'Visible' = 0. "1/0 是否显示EXCELCALL METHOD OF excel 'Workbooks' = workbook.CALL METHOD OF workbook 'Open'EXPORTING#1 = fname. ."打开上面下载路径下的excel文件CALL METHOD OF excel 'Sheets' = sheetEXPORTINGCALL METHOD OF sheet 'Select' .CALL METHOD OF sheet 'ACTIVATE'. “sheet 激活SET PROPERTY OF sheet 'NAME' = sheetname. “设定sheet 名称*此处假设内表itab 中已经存在需要写入excel中的数据*并且假如从模板的第7行开始插入数据LOOP AT itab INTO wa.tab = wa-tabix + 6.*在excel中插入一行PERFORM excel_row_insert USING sheet tab 1.*填充所插入行的每个单元格的数据PERFORM fill_range USING tab 1 wa-t01.PERFORM fill_range USING tab 2 wa-t02.PERFORM fill_range USING tab 3 wa-t03.PERFORM fill_range USING tab 4 wa-t04.PERFORM fill_range USING tab 5 wa-t05.PERFORM fill_range USING tab 6 wa-t06.ENDLOOP.*设置EXCEL中所插入的数据行边框线格式为黑色有边框bod = tab.CONDENSE bod NO-GAPS.CONCATENATE 'A6:F' bod INTO bod.PERFORM borderrange USING excel bod.PERFORM sub_excel_save."保存excel数据*&---------------------------------------------------------------------**& Form sub_excel_save*&---------------------------------------------------------------------**----------------------------------------------------------------------*FORM sub_excel_save.GET PROPERTY OF excel 'ActiveSheet' = sheet. “获取活动SHEETFREE OBJECT sheet.FREE OBJECT workbook.GET PROPERTY OF excel 'ActiveWorkbook' = workbook.CALL METHOD OF workbook 'SAVE'.SET PROPERTY OF excel 'Visible' = 1. "是否显示EXCEL 此处显示不退出* SET PROPERTY OF excel 'Visible' = 1.* CALL METHOD OF workbook 'CLOSE'.* CALL METHOD OF excel 'QUIT'. 注释部分为不显示直接退出FREE OBJECT sheet.FREE OBJECT workbook.FREE OBJECT excel.ENDFORM. "save_book*&---------------------------------------------------------------------**& 向excel中的指定行插入N行*&---------------------------------------------------------------------*FORM excel_row_insert USING lcobj_sheetlc_rowlc_count.DATA lc_range TYPE ole2_object.DATA h_borders TYPE ole2_object.DO lc_count TIMES.CALL METHOD OF lcobj_sheet 'Rows' = lc_rangeEXPORTING #1 = 6.CALL METHOD OF lc_range 'Copy'. “COPY第6行插入一个新行CALL METHOD OF lcobj_sheet 'Rows' = lc_rangeEXPORTING #1 = lc_row.CALL METHOD OF lc_range 'Insert'.CALL METHOD OF lc_range 'ClearContents'. "是否需要清空CellENDDO.ENDFORM. "excel_row_insert*&---------------------------------------------------------------------**& Form fill_range*&---------------------------------------------------------------------** text 填充EXCEL 单元格*----------------------------------------------------------------------** -->VALUE(F_ROW) text* -->VALUE(F_COL) text* -->VALUE(F_VALUE) text*----------------------------------------------------------------------*FORM fill_range USING value(f_row)value(f_col)value(f_value).DATA:row TYPE i,col TYPE i.row = f_row.col = f_col.CALL METHOD OF excel 'CELLS' = cellEXPORTING#1 = row#2 = col.SET PROPERTY OF cell 'VALUE' = f_value.ENDFORM. "fill_range*&---------------------------------------------------------------------**& Form borderrange*&---------------------------------------------------------------------** text:设置EXCEL中所插入的数据行边框线格式*----------------------------------------------------------------------** -->LCOBJ_EXCEL text* -->RANGE text*----------------------------------------------------------------------*FORM borderrange USING lcobj_excelrange .DATA: lc_cell TYPE ole2_object ,lc_borders TYPE ole2_object .CALL METHOD OF lcobj_excel 'RANGE' = lc_cellEXPORTING#1 = range.DO 4 TIMES .CALL METHOD OF lc_cell 'BORDERS' = lc_bordersEXPORTING #1 = sy-index.SET PROPERTY OF lc_borders 'LineStyle' = '1'.SET PROPERTY OF lc_borders 'WEIGHT' = 2. "4=maxSET PROPERTY OF lc_borders 'ColorIndex' = '1'.ENDDO.FREE OBJECT lc_borders.FREE OBJECT lc_cell.ENDFORM. "borderrange。
SAP ABAP 长文本处理(word文档良心出品)
1.1.长文本处理1.1.1.读取长文本这里以抓取Delivery Note的Item上的长文本作为例子。
1.1.1.1.查找长文本的Text ID,Text ObjectVL02N修改Delivery Note: 80000023按回车键或者点击,选中要一行资料,然后点击菜单Goto->Item->Texts点击,然后点击菜单:Goto->Header在这里显示的Text ID:0001,Text Object:VBBP,以及Text Name:0080000023000010,这几个字段在后面取值时要使用到1.1.1.2.编写程序*&---------------------------------------------------------------------**& Report Y10028*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT Y10028.DATA IT_DATA TYPE STANDARD TABLE OF TL INE .DATA W_DATA TYPE TLINE.DATA ID LIKE THEAD-TDID.DATA LANGUAGE LIKE THEAD-TDSPRAS. DATA NAME LIKE THEAD-TDNAME.DATA OBJECT LIKE THEAD-TDOBJECT. START-OF-SELECTION.ID = '0001'.LANGUAGE = 'EN'.NAME = '0080000023000010'.OBJECT = 'VBBP'.CALL FUNCTION 'READ_TEXT'EXPORTING* CLIENT = SY -MANDTID = ID LANGUAGE = LA NGUAGENAME = NA MEOBJECT = OB JECT* ARCHIVE_HANDLE = 0 * LOCAL_CAT = ' '* IMPORTING* HEADER =TABLESLINES = IT _DATA* EXCEPTIONS* ID = 1 * LANGUAGE = 2 * NAME = 3* NOT_FOUND = 4 * OBJECT = 5 * REFERENCE_CHECK = 6 * WRONG_ACCESS_TO_ARCHIVE = 7 * OTHERS = 8 .IF SY-SUBRC <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NU MBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MS GV3 SY-MSGV4.ENDIF.LOOP AT IT_DATA INTO W_DATA.WRITE:/ W_DATA-TDLINE.ENDLOOP.1.1.1.3.显示结果1.1.2.写入长文本有时需要将其他的系统的资料Upload到长文本字段中,或者将资料从文字档、Excel档Upload到长文本字段中,使用BDC比较麻烦,这个时候可以使用SAVE_TEXT Function来写入长文本。
SAP日记-ABAP导出EXCEL的两种方式(OLE_DOI)
SAP日记——ABAP导出EXCEL的两种方法提到OLE&DOI,我们不得不先说说两者这间的关系。
OLE是SAP早期与微软Office集成的工具,而DOI是它的替代技术。
在实际项目中使用到OLE&DOI的场合多是EXCEL表格的读入或是填制。
有些需要自动画表格及填数据,有的只是要求在原有的模版上填制数据。
根据不同的场合可以选用不同的技术。
(有些公司用EXCEL的打印来替代FORM)下面主要讲一下,OLE&DOI关于EXCEL的处理。
OLE实际上是类EXCEL中VBA的一种写法。
有一种简单的方法,就是你可以在EXCEL中把要实现的动作录制成宏,然后根据宏的代码把它改成OLE。
OLE同时也支持直接调用EXCEL宏程序(没有禁宏的前提下)。
DOI完全用类实现。
特点是,你不用再去记那些繁琐的VBA语言了,DOI都给你包装成类的方法了。
同时作为一个控件,已经集成在了SAP的GUI中了,你就可以在SAP的屏幕中写Office的东西了,不用再跳出一个窗口来了,减少一些误操作。
当然DOI也是支持调用EXCEL宏程序的,前提是宏没有被禁。
两种方法在实际项目中都有使用,有时候就要看实施顾问擅长于那个了,当然本人还是推荐用新的,但也不要丢了老的(有时候要维护一些老程序或许用得着)。
因为两种在技术上并没有什么难点,只有熟练度的差别。
我可记不住那么多的方法和类名,一般常备两份模版两份手册在身,边写边查,在项目进度之内完工就OK。
我读取EXCEL还是比较简单的,这里不再讲了。
既然,EXCEL的填制有自动画表格和填制模版之分,而自动画表格,显然就是什么都要自己写,工程量比较大,需要大量的调试(字体、表格宽度、颜色等),没有什么捷径,捧着手册慢慢写吧!对于填制模版,那自然要将模版上传到服务器,程序执行的时候再下载使用。
我使用的一般有3中:1. FTP2. T-code SMW03. T-code OAORFTP顾名思义,就是把文件传到FTP上,然后在运行的时候,直接输入文件服务器的路径,把模版在本地打开填制。
SAP ABAP-DOI技术输出EXCEL文档(1)
DOI技术是ABAP程序编程中常用的一种技术,这种技术在使用中有许多不常用的技巧,灵活使用这种技巧可以让你在编程过程中如虎添翼,简化你的程序逻辑与代码复杂度。
本文告诉你如何全屏幕显示DOI输出的EXCEL文档。
创建一个空屏幕上,只在屏幕上激活PAI、PBO事件下的FUNCTIONMOUDLE。
干嘛非要在屏幕上放一个CONTAINER组件呢,固定后那么难看。
完全可以动态创建嘛!动态创建CL_GUI_CONTAINER这个类。
动态创建的好处在于,CONTAINER的大小不是固定的,完全随着屏幕的大小而创建。
注意检查屏幕是否支持对象的使用。
OAOR上传模版。
其实如果输出的EXCEL比较简单,就可以不使用模版。
本文先输出一个简单的EXCEL文件,不使用上传的EXCEL模版。
*&---------------------------------------------------------------------**& REPORT ZTRAINING26 ABAP DOI技术输出EXCEL文档*&*&---------------------------------------------------------------------**& CREATED BY XAVERY HSUEH(薛现军) ON 2015-07-26.*& **&---------------------------------------------------------------------*REPORT ZTRAINING26 NO STANDARD PAGE HEADING.************************************************************************** 声明数据库表DECLARATION OF DATABASE************************************************************************* TABLES:MARA. "物料主数据*调用相关对象使用的变量TYPE-POOLS:VRM, SBDST, SOI.************************************************************************** 定义结构类型DEFINE THE STRUCTURE'S TYPE *************************************************************************** 结果内表结构TYPES:BEGIN OF TY_RESULT,MATNR TYPE MARA-MATNR, "物料编号ERSDA TYPE MARA-ERSDA,ERNAM TYPE MARA-ERNAM,MTART TYPE MARA-MTART,MATKL TYPE MARA-MATKL,MEINS TYPE MARA-MEINS,PRDHA TYPE MARA-PRDHA,MAKTX TYPE MAKT-MAKTX,END OF TY_RESULT.TYPES: BEGIN OF TY_DOCU_DESCR,DOCUMENT_NAME(40),DOCUMENT_ID(64),END OF TY_DOCU_DESCR.* EXCEL的数据块TYPES:BEGIN OF TY_EXCEL,AREANO(2) TYPE N,BORDER TYPE C,TOP TYPE I,LEFT TYPE I,ROWS TYPE I,COLS TYPE I,CONTENT TYPE SOI_GENERIC_TABLE,END OF TY_EXCEL.************************************************************************* * 定义变量与内表DEFINE THE VARIANTS AND INTERNAL TABLES ************************************************************************** DATA:GT_RESULT TYPE TABLE OF TY_RESULT WITH HEADER LINE. "结果内表*@---------------------------------------------------------------------** SAP DESKTOP OFFICE INTEGRATION INTERFACESDATA: CL_CONTAINER TYPE REF TO CL_GUI_CONTAINER,CL_CONTROL TYPE REF TO I_OI_CONTAINER_CONTROL,CL_DOCU_PROXY TYPE REF TO I_OI_DOCUMENT_PROXY,CL_SPREADSHEET TYPE REF TO I_OI_SPREADSHEET,CL_ERROR TYPE REF TO I_OI_ERROR,CL_ERRORS TYPE REF TO I_OI_ERROR OCCURS 0 WITH HEADER LINE.* SPREADSHEET INTERFACE STRUCTURES FOR EXCEL DATA INPUTDATA:GS_CELLITEM TYPE SOI_GENERIC_ITEM,GS_RANGEITEM TYPE SOI_RANGE_ITEM,GT_RANGES TYPE SOI_RANGE_LIST,GV_INITIALIZED TYPE C,GV_RETCODE TYPE SOI_RET_STRING,GT_EXCEL_FORMAT TYPE SOI_FORMAT_TABLE,GS_FORMAT LIKE LINE OF GT_EXCEL_FORMAT.DATA:GT_IMT_TAB TYPE TABLE OF TY_EXCEL,GS_IMT_TAB TYPE TY_EXCEL,GT_CONTENT TYPE SOI_GENERIC_TABLE,GS_CONTENT TYPE SOI_GENERIC_ITEM,GV_MACRO TYPE TEXT100,GV_SHEET TYPE CHAR20,GV_CELL_FIT TYPE C VALUE 'X'.DATA:GV_APP TYPE VRM_ID,GT_APPLIST TYPE VRM_VALUES,GV_EXCEL TYPE TEXT80 VALUE 'EXCEL.SHEET', "EXCEL的表单GV_DOCU_TYPE TYPE TEXT80,GV_URL(256) TYPE C,GV_HAS_ACTIVEX TYPE C,GV_HAS TYPE I,GV_LINE TYPE I,GV_COL TYPE I,"字段所在的列数GV_ROW TYPE I.************************************************************************** 宏定义DEFINE THE MACRO ************************************************************************** DEFINE M_VALUE.CLEAR &1.&1-KEY = &2.&1-TEXT = &3.APPEND &1.END-OF-DEFINITION.* 将数据对应到EXCEL的单元格,并添加到内表中DEFINE M_EXCEL_CELL.CLEAR GS_CONTENT.GV_COL = GV_COL + 1.GS_CONTENT-ROW = GV_ROW.GS_CONTENT-COLUMN = GV_COL.GS_CONTENT-VALUE = &1.SHIFT GS_CONTENT-VALUE LEFT DELETING LEADING SPACE.APPEND GS_CONTENT TO GT_CONTENT.END-OF-DEFINITION.************************************************************************* * 选择屏幕CUSTOMIZE THE SELECTION-SCREEN ************************************************************************* *SELECTION-SCREEN BEGIN OF BLOCK XAVERY WITH FRAME TITLE TEXT-001.SELECT-OPTIONS:S_MATNR FOR MARA-MATNR MEMORY ID MAT. "物料编号SELECTION-SCREEN END OF BLOCK XAVERY.************************************************************************* * 执行程序事件EXECUTING THE PROGRAM'S EVENTS************************************************************************** INITIALIZATION.START-OF-SELECTION.PERFORM SUB_QUERY_MARA.END-OF-SELECTION.PERFORM SUB_PROCESS_EXCEL.CALL SCREEN 0100.*&---------------------------------------------------------------------**& FORM SUB_QUERY_MARA*&---------------------------------------------------------------------** 从物料主数据表MARA中取数*----------------------------------------------------------------------*FORM SUB_QUERY_MARA .* 取物料主数据SELECT MARA~MATNRMARA~ERSDAMARA~ERNAMMARA~MTARTMARA~MATKLMARA~MEINSMARA~PRDHAMAKT~MAKTXFROM MARA INNER JOIN MAKT ON MARA~MATNR = MAKT~MATNRINTO CORRESPONDING FIELDS OF TABLE GT_RESULTWHERE MARA~MATNR IN S_MATNR ANDMAKT~SPRAS = SY-LANGU.ENDFORM.************************************************************************* * DIALOG MODULES PBO AND PAI************************************************************************ MODULE STATUS_0100 OUTPUT.SET PF-STATUS 'XAVERY_HSUEH'.SET TITLEBAR 'TIT_100' WITH '活动界面示例'.PERFORM SUB_CREATE_BASIC_OBJECT.PERFORM SUB_SET_CELL_VALUE.PERFORM SUB_SET_SHEET.ENDMODULE. "STATUS_0100 OUTPUT*&---------------------------------------------------------------------**& DIALOG MODULES PAI*&---------------------------------------------------------------------*MODULE USER_COMMAND_0100 INPUT.LEAVE TO SCREEN 0.ENDMODULE. "USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------**& FORM SUB_CREATE_BASIC_OBJECT*&---------------------------------------------------------------------** 创建相关的对象*----------------------------------------------------------------------*FORM SUB_CREATE_BASIC_OBJECT .CALL FUNCTION 'GUI_HAS_ACTIVEX'IMPORTINGRETURN = GV_HAS_ACTIVEX.IF GV_HAS_ACTIVEX IS INITIAL.MESSAGE E007(DEMOOFFICEINTEGRATIO).ENDIF.CHECK GV_INITIALIZED IS INITIAL.* FIRST GET THE SAP DOI I_OI_CONTAINER_CONTROL INTERFACECALL METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL IMPORTINGCONTROL = CL_CONTROLERROR = CL_ERROR.* CHECK NO ERRORS OCCUREDCALL METHOD CL_ERROR->RAISE_MESSAGEEXPORTING TYPE = 'E'.* CONTIANER初始化CL_CONTAINER = CL_GUI_CONTAINER=>SCREEN0.* INITIALIZE THE SAP DOI CONTAINER, TELL IT TO RUN IN THE CONTAINER* SPECIFIED ABOVE AND TELL IT TO RUN EXCEL IN-PLACECALL METHOD CL_CONTROL->INIT_CONTROLEXPORTING R3_APPLICATION_NAME = 'RBASIS' "#EC NOTEXT INPLACE_ENABLED = 'X'INPLACE_SCROLL_DOCUMENTS = 'X'PARENT = CL_CONTAINERREGISTER_ON_CLOSE_EVENT = 'X'REGISTER_ON_CUSTOM_EVENT = 'X'NO_FLUSH = 'X'IMPORTINGERROR = CL_ERRORS.* SAVE ERROR OBJECT IN COLLECTIONAPPEND CL_ERRORS.CALL METHOD CL_GUI_CFW=>DISPATCH.* ASK THE SAP DOI CONTAINER FOR A I_OI_DOCUMENT_PROXY FOR EXCEL CALL METHOD CL_CONTROL->GET_DOCUMENT_PROXYEXPORTINGDOCUMENT_TYPE = 'EXCEL.SHEET'NO_FLUSH = 'X'*REGISTER_CONTAINER = 'X'IMPORTINGDOCUMENT_PROXY = CL_DOCU_PROXYERROR = CL_ERRORS.APPEND CL_ERRORS.* 创建EXCEL文档CALL METHOD CL_DOCU_PROXY->CREATE_DOCUMENTEXPORTINGOPEN_INPLACE = 'X'NO_FLUSH = 'X'DOCUMENT_TITLE = '明细表'IMPORTINGERROR = CL_ERRORS.* 检查标识: WHETHER INTERFACE IS SUPPORTED FOR THIS DOC. TYPECALL METHOD CL_DOCU_PROXY->HAS_SPREADSHEET_INTERFACE EXPORTINGNO_FLUSH = 'X'IMPORTINGIS_AVAILABLE = GV_HASERROR = CL_ERRORS.APPEND CL_ERRORS.CALL METHOD CL_DOCU_PROXY->GET_SPREADSHEET_INTERFACE EXPORTINGNO_FLUSH = 'X'IMPORTINGSHEET_INTERFACE = CL_SPREADSHEETERROR = CL_ERRORS.APPEND CL_ERRORS.FREE CL_ERRORS.GV_INITIALIZED = 'X'.ENDFORM.*&---------------------------------------------------------------------**& FORM SUB_PROCESS_EXCEL*&---------------------------------------------------------------------** 处理结果内表*----------------------------------------------------------------------*FORM SUB_PROCESS_EXCEL .* 将表格抬头数据添加到内表CLEAR GS_IMT_TAB.REFRESH GT_CONTENT.GV_COL = 0.GV_ROW = 1.M_EXCEL_CELL '物料编码'.M_EXCEL_CELL '物料类型'.M_EXCEL_CELL '物料组'.M_EXCEL_CELL '物料描述'.GS_IMT_TAB-AREANO = 1.GS_IMT_TAB-BORDER = 'X'.GS_IMT_TAB-TOP = 1. "输出起始单元格行GS_IMT_TAB-LEFT = 1. "输出起始单元格列GS_IMT_TAB-ROWS = 1.GS_IMT_TAB-COLS = 4.GS_IMT_TAB-CONTENT = GT_CONTENT.APPEND GS_IMT_TAB TO GT_IMT_TAB.* 将表格数据添加到内表REFRESH GT_CONTENT.GV_ROW = 0.LOOP AT GT_RESULT.GV_COL = 0.GV_ROW = GV_ROW + 1.M_EXCEL_CELL GT_RESULT-MATNR.M_EXCEL_CELL GT_RESULT-MTART.M_EXCEL_CELL GT_RESULT-MATKL.M_EXCEL_CELL GT_RESULT-MEINS.M_EXCEL_CELL GT_RESULT-MAKTX.ENDLOOP.GV_LINE = GV_ROW.GS_IMT_TAB-AREANO = 2.GS_IMT_TAB-BORDER = 'X'.GS_IMT_TAB-TOP = 2. "数据从第二行开始GS_IMT_TAB-LEFT = 1. "数据从第一列开始GS_IMT_TAB-ROWS = GV_ROW.GS_IMT_TAB-COLS = GV_COL.GS_IMT_TAB-CONTENT = GT_CONTENT.APPEND GS_IMT_TAB TO GT_IMT_TAB.CLEAR GS_IMT_TAB.REFRESH GT_CONTENT.GV_COL = 0.GV_ROW = 1.M_EXCEL_CELL '执行日期'.M_EXCEL_CELL SY-DATUM.M_EXCEL_CELL '登录用户'.M_EXCEL_CELL SY-UNAME.GS_IMT_TAB-AREANO = 3.GS_IMT_TAB-TOP = GV_LINE + 2. "输出起始单元格行GS_IMT_TAB-LEFT = 1. "输出起始单元格列GS_IMT_TAB-ROWS = 1. "共N行N = 1GS_IMT_TAB-COLS = 4. "共N列N = 4GS_IMT_TAB-CONTENT = GT_CONTENT.APPEND GS_IMT_TAB TO GT_IMT_TAB.ENDFORM. " SUB_PROCESS_EXCEL*&---------------------------------------------------------------------**& FORM SUB_SET_CELL_VALUE*&---------------------------------------------------------------------** 设置EXCEL文档的单元格的内容*----------------------------------------------------------------------* FORM SUB_SET_CELL_VALUE .LOOP AT GT_IMT_TAB INTO GS_IMT_TAB.* 给EXCEL添加数据块CALL METHOD CL_SPREADSHEET->INSERT_RANGE_DIMEXPORTINGNAME = 'CELL'NO_FLUSH = 'X'TOP = GS_IMT_TAB-TOPLEFT = GS_IMT_TAB-LEFTROWS = GS_IMT_TAB-ROWSCOLUMNS = GS_IMT_TAB-COLSIMPORTINGERROR = CL_ERRORS.APPEND CL_ERRORS.* 设定输出数据的内容REFRESH GT_RANGES.GS_RANGEITEM-NAME = 'CELL'.GS_RANGEITEM-COLUMNS = GS_IMT_TAB-COLS.GS_RANGEITEM-ROWS = GS_IMT_TAB-ROWS.GS_RANGEITEM-CODE = 4.APPEND GS_RANGEITEM TO GT_RANGES.* SET DATACALL METHOD CL_SPREADSHEET->SET_RANGES_DATA EXPORTINGRANGES = GT_RANGESCONTENTS = GS_IMT_TAB-CONTENTNO_FLUSH = 'X'IMPORTINGERROR = CL_ERRORS.APPEND CL_ERRORS.* 设置FRAME.IF GS_IMT_TAB-BORDER = 'X'.CALL METHOD CL_SPREADSHEET->SET_FRAMEEXPORTINGRANGENAME = 'CELL'TYP = '127'COLOR = '1'NO_FLUSH = 'X'IMPORTINGERROR = CL_ERRORS.ENDIF.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------* *& FORM SUB_SET_SHEET*&---------------------------------------------------------------------* * 设置EXCEL文档的SHEET页的格式*----------------------------------------------------------------------* FORM SUB_SET_SHEET .* 自动调整单元格宽度IF GV_CELL_FIT = 'X'.CALL METHOD CL_SPREADSHEET->FIT_WIDESTEXPORTINGNAME = SPACENO_FLUSH = 'X'.ENDIF.* 修改WORK SHEET 的名字GV_SHEET = '物料主数据'.CALL METHOD CL_SPREADSHEET->SET_SHEET_NAME EXPORTINGNEWNAME = GV_SHEETOLDNAME = 'SHEET1'IMPORTINGERROR = CL_ERRORS.ENDFORM. " SUB_SET_SHEET。
使用ABAP操作officeWord文档
使用ABAP操作officeWord文档There is a useful class CL_DOCX_DOCUMENT provided by SAP which could support read and write access to a word document with file extension “.docx”.This document gives a brief introduction about its usage and could be used as a starting point to build your own application which needs to manipulate word document via ABAP.Office OpenXMLStarting with Microsoft Office2007, when you create a new word document, you wil l get a file with “.docx” file extension by default which follows the Office openXML format. You can find its detailed definition from wiki.For example, I create a very simple word document which contains a header area, a paragraph with three lines as body, and a picture.According to Office OpenXML protocal, after you change the file extension from “.docx” to “.zip”, its icon changes to an archive file and thus could be opened via winrar. All information about my sample document are spreaded inside a series of xml files in the archive file ( plus media file like picture, music and video if the word document has such one).The most efficient way to study is create a word document by yourself, change extension to zip and explore it.Using CL_DOCX_DOCUMENT to read word documentI use the following sample code to explain how to use this class. In order to avoid unnecessary local variable declaration, I use the new feature “inline declaration” available in release 740. If this version is not available for you, just replace them with old manual declaration for local variable.DATA: lv_content TYPE xstring,lo_document TYPE REF TO cl_docx_document.PERFORM get_doc_binary USING 'C:\Users\i042416\Deskto p\test.docx' CHANGING lv_content.lo_document = cl_docx_document=>load_document( lv_co ntent ).CHECK lo_document IS NOT INITIAL.DATA(lo_core_part) = lo_document->get_corepropertiespart ( ).DATA(lv_core_data) = lo_core_part->get_data( ).DATA(lo_main_part) = lo_document->get_maindocumentpa rt( ).DATA(lo_image_parts) = lo_main_part->get_imageparts( ).DATA(lv_image_count) = lo_image_parts->get_count( ).DO lv_image_count TIMES.DATA(lo_image_part) = lo_image_parts->get_part( sy-index - 1 ).DATA(lv_image_data) = lo_image_part->get_data( ).ENDDO.DATA(lo_header_parts) = lo_main_part->get_headerparts( ).DATA(lv_header_count) = lo_header_parts->get_count( ).DO lv_header_count TIMES.DATA(lo_header_part) = lo_header_parts ->get_part( sy-index - 1 ).DATA(lv_header_data) = lo_header_part->get_data( ). ENDDO.Comments(1) you can get a instance of word document via methodcl_docx_document=>load_document. It is necessary to pass the document binary data with type xstring into this method.I don’t list source code of subroutine get_doc_binary as it is not relevant. Just find it from attachment.(2) The system administrative data like author, creation and last modification date are stored in so called “Core property part”, which could be fetched via document instance got in step1. Once you own the instance of Core property part, you can get its binary data via method get_data().The returned data has xml format( so does all the left other kinds of parts in this document ) so it could be easily parsed via DOM or SAX parser.(3) from document instance we can get main part instance. Its binary data includes all the three body line texts with their font color:(4) The binary data of all pictures embedded in the word document could be retrieved via two steps. Firstly get the image part collection from main part instance and then loop each image part instance from the image collection. The get_part method accepts the index starting from 0. The way to read header block information is exactly the same.Using CL_DOCX_DOCUMENT to change word document See the nice document How to – Add Custom XML Parts to Microsoft Word using ABAP from Leon Limson.You could also achieve the same requirement with the respective class below.Further readingIf you would like to know how a word template is merged with data from xml file ( for example a response file from web service ), you can find technical detail in my blog Understand how the word template is merged with xml data stream.。
abap 函数导出的值传递
abap 函数导出的值传递
ABAP函数是一种用于在SAP系统中处理数据和执行业务逻辑的编程语言。
在ABAP函数中,可以使用导出参数将函数内部计算的结果传递给其他程序或模块。
本文将探讨如何使用ABAP函数导出的值传递,以及如何在实际应用场景中使用这些值。
ABAP函数可以通过导出参数将计算结果传递给其他程序。
导出参数是在函数定义中声明的,并且在函数内部进行赋值。
在函数执行完毕后,导出参数的值将被传递给调用该函数的程序。
这种方式可以方便地将函数的计算结果传递给其他模块,从而实现数据的共享和复用。
在实际应用中,ABAP函数的导出值可以被用作标题。
比如,在一个订单管理系统中,可以使用ABAP函数来计算订单的总金额,并将计算结果作为导出参数传递给其他模块。
然后,可以将这个值用作订单的标题,以便用户在查看订单列表时可以快速了解订单的总金额。
这样的设计可以提高系统的易用性和用户体验。
ABAP函数导出的值还可以用于报表生成和数据分析。
例如,在财务系统中,可以使用ABAP函数计算各个部门的利润,并将计算结果作为导出参数传递给报表生成模块。
然后,可以根据利润的大小来生成相应的报表,以便管理人员进行决策和分析。
这样的设计可以提高财务管理的效率和决策的准确性。
ABAP函数导出的值可以方便地传递和共享数据,提高系统的灵活性和可扩展性。
通过将这些值用作标题或应用于其他业务逻辑,可以实现更精确和高效的数据处理和业务流程。
在实际应用中,我们可以根据具体的业务需求和系统设计,灵活运用ABAP函数导出的值,以提升系统的功能和用户体验。
abap 函数导出的值传递
abap 函数导出的值传递ABAP函数是一种在SAP系统中使用的编程语言,通过函数导出的值传递可以在程序中使用。
本文将围绕这一主题展开,介绍ABAP函数的使用以及如何将其导出的值传递作为标题。
ABAP函数是一种在SAP系统中编写和执行程序的方式。
它可以在SAP系统中的各个模块中使用,例如财务、物流、人力资源等。
通过ABAP函数,可以实现各种功能,如数据处理、计算、条件判断等。
当我们使用ABAP函数时,有时需要将函数的返回值传递给其他程序或模块使用。
这时就需要使用值传递。
值传递是一种将数据从一个程序传递到另一个程序的方式,它可以保证数据的完整性和准确性。
在ABAP函数中,可以使用EXPORT关键字将函数的返回值导出。
导出的值可以是任何数据类型,如整数、字符串、日期等。
通过将值导出,我们可以在其他程序中使用这些值。
为了更好地理解ABAP函数的值传递,我们可以以一个具体的例子来说明。
假设我们有一个ABAP函数,用于计算两个整数的和。
这个函数的返回值是一个整数,表示两个整数的和。
在这个例子中,我们可以将函数的返回值导出为标题。
这样做的好处是可以将计算结果作为标题显示在界面上,给用户提供更直观的信息。
为了实现这个功能,我们可以在ABAP函数中使用EXPORT关键字将计算结果导出。
然后,在界面上使用相应的功能模块来获取导出的值,并将其作为标题显示。
在代码实现方面,我们需要在ABAP函数中使用EXPORT关键字将计算结果导出。
然后,我们可以在界面上使用相应的功能模块来获取导出的值,并将其作为标题显示。
在界面上显示标题的方式有很多种,可以是一个文本框、一个标签或者一个弹出窗口。
具体的实现方法取决于我们的需求和界面设计。
除了显示标题,我们还可以根据导出的值做一些其他的处理。
例如,我们可以根据计算结果来改变界面的布局或者执行其他的动作。
通过本文的介绍,我们了解了ABAP函数的使用以及如何将其导出的值传递作为标题。
ABAP函数是一种强大的编程语言,可以在SAP系统中实现各种功能。
SAPABAP如何将内表与EXCEL导入、导出
SAPABAP如何将内表与EXCEL导入、导出将内表的数据导出到EXCELREPORT ZTEST08.DATA: BEGIN OF MY_DATA,MANDT LIKE USR02-MANDT,BNAME LIKE USR02-BNAME,ERDAT LIKE USR02-ERDAT,LTIME LIKE USR02-LTIME,END OF MY_DATA.DATA: IT_DATA LIKE MY_DATA OCCURS 0.SELECT USR02~MANDT USR02~BNAME USR02~ERDAT USR02~LTIMEAPPENDING TABLE IT_DATAFROM USR02UP to 100 rows.*排序SORT IT_DATA BY BNAME.INCLUDE OLE2INCL. "定义OLE变量DATA: EXCEL TYPE OLE2_OBJECT,SHEET TYPE OLE2_OBJECT,CELL TYPE OLE2_OBJECT,WORKBOOK TYPE OLE2_OBJECT,XLSNAME TYPE STRING VALUE 'C:\sap_usr02.xls',LINE TYPE I VALUE 0. "行号CREATE OBJECT EXCEL 'EXCEL.APPLICATION'."启动ExcelIF SY-SUBRC NE 0.WRITE: / '启动Excel失败。
'.STOP.ENDIF.CALL METHOD OF EXCEL 'WORKBOOKS' = WORKBOOK.SET PROPERTY OF EXCEL 'VISIBLE' = 1. "使excel 可视SET PROPERTY OF EXCEL 'SHEETSINNEWWORKBOOK' = 1. "如果是读取excel文件中的内容则是直接打开工作簿第一页CALL METHOD OF WORKBOOK 'ADD'. "例如:CALL METHOD OF EXCEL 'WORKSHEETS' = SHEET EXPORTING #1 = 1.LOOP AT IT_DATA INTO MY_DATA.LINE = LINE + 1. "Excel 中行号从1开始CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = LINE #2 = 1. "指定单元格,SET PROPERTY OF CELL 'VALUE' = MY_DATA-MANDT. "写入值CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = LINE #2 = 2. "指定单元格,SET PROPERTY OF CELL 'VALUE' = MY_DATA-BNAME. "写入值CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 =LINE #2 = 3. "指定单元格,SET PROPERTY OF CELL 'VALUE' = MY_DATA-ERDAT. "写入值CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = LINE #2 = 4. "指定单元格,SET PROPERTY OF CELL 'VALUE' = MY_DATA-LTIME. "写入值ENDLOOP.GET PROPERTY OF EXCEL 'ACTIVESHEET' = SHEET. "激活工作簿GET PROPERTY OF EXCEL 'ACTIVEWORKBOOK' = WORKBOOK. "激活工作区CALL METHOD OF WORKBOOK 'SAVEAS' EXPORTING #1 = XLSNAME #2 = 1. "将excel文件保存CALL METHOD OF WORKBOOK 'CLOSE'. "关闭工作区CALL METHOD OF EXCEL 'QUIT'. "退出excel*WRITE:/ XLSNAME,'DONE'. "退出成功,输出doneFREE OBJECT SHEET. "释放操作FREE OBJECT WORKBOOK.FREE OBJECT EXCEL.上传的EXCEL给内表赋值这个EXCEL上载直接读取行和列,并把行和列对应的值赋给内表。
SAP-ABAP-HR批量上传-删除文件-图片-PDF-WORD等
通过一个文件夹批量上传文件,图片,PDF,WORd等,当同一个文件名的文档类型及业务对象相同时,删除旧文件。
上传的文件名为8位,文件名=员工号输入屏幕输出屏幕*&---------------------------------------------------------------------**&Report ZRPT_HR_PA001**&**&---------------------------------------------------------------------**&Program ID:<ZRPT_HR_PA001>**&Program Name:<批量上传人员的电子文档>**&---------------------------------------------------------------------* REPORT ZRPT_HR_PA001. INCLUDE ZRPT_HR_PA001_TOP.*---------------------------------------------------------------------**AT SELECTION-SCREEN*---------------------------------------------------------------------*AT SELECTION-SCREEN.*屏幕输入正确性判断PERFORM PER_CHECK_SCREEN.AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_WQJ."上传路径*取出上传路径PERFORM PER_GET_P_WQJ.*---------------------------------------------------------------------**START-OF-SELECTION*---------------------------------------------------------------------* START-OF-SELECTION.*取出所选文件夹数据PERFORM PER_GET_WQJ.*上传文件PERFORM PER_UPLOAD_DATA.*ALV输出PERFORM PER_ALV_OUT.END-OF-SELECTION.INCLUDE ZRPT_HR_PA001_FORM.*&---------------------------------------------------------------------**&包括ZRPT_HR_PA001_TOP**&---------------------------------------------------------------------*TABLES:TOAOM,"业务对象TOADV,"文档类型PA0001,"员工主数据TOAHR."文档类型*类型池定义TYPE-POOLS:SLIS.DATA:G_PATH TYPE STRING,"G_FILTER TYPE STRING,"文件类型G_WQLX LIKE TOADD-DOC_TYPE,"文件类型G_COUNT TYPE I,G_FILENAME(40)TYPE C,G_FILEEXT(10)TYPE C,G_LEN TYPE I,G_SAPOBJID LIKE SAPB-SAPOBJID,"上传照片文件名G_SAPPFAD LIKE SAPB-SAPPFAD,"上传路径G_NUM(10)TYPE I,G_FILE_NAME LIKE RLGRAP-FILENAME."SAP文件路径*文件夹内容DATA:TAB_G_FILETAB TYPE TABLE OF FILE_INFO WITH HEADER LINE.DATA:TAB_G_TOAHR TYPE TOAHR.*上传成功后得到的员工编号IDDATA:BEGIN OF TAB_G_TOAV0OCCURS1.INCLUDE STRUCTURE TOAV0.DATA:END OF TAB_G_TOAV0.*ALV输出DATA:BEGIN OF TAB_G_ALVOUT OCCURS0.INCLUDE STRUCTURE ZHR_LOG_PA001.DATA:END OF TAB_G_ALVOUT.*ALV定义DATA:G_ALV_FIELD TYPE SLIS_FIELDCAT_ALV,G_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,G_LAYOUT TYPE SLIS_LAYOUT_ALV.*---------------------------------------------------------------------**SELECTION-SCREEN*---------------------------------------------------------------------*PARAMETERS:P_YWDX LIKE TOAV0-AR_OBJECT DEFAULT'PREL'OBLIGATORY,"业务对象P_WDLX LIKE TOADV-AR_OBJECT OBLIGATORY,"文档类型P_WQJ LIKE RLGRAP-FILENAME OBLIGATORY,"上传路径P_ZHF AS CHECKBOX."可重复*&---------------------------------------------------------------------**&包括ZRPT_HR_PA001_FORM**&---------------------------------------------------------------------**&---------------------------------------------------------------------**&Form PER_CHECK_SCREEN*&---------------------------------------------------------------------**text*----------------------------------------------------------------------* *-->p1text*<--p2text*----------------------------------------------------------------------* FORM PER_CHECK_SCREEN.*业务对象判断正确性CHECK P_YWDX IS NOT INITIAL.SELECT SINGLE*FROM TOAOMWHERE SAP_OBJECT=P_YWDX.IF SY-SUBRC<>0.MESSAGE'无此业务对象'TYPE'E'.EXIT.ENDIF.*文档类型判断正确性CHECK P_WDLX IS NOT INITIAL.CLEAR:G_WQLX.SELECT SINGLE DOC_TYPEFROM TOADVINTO G_WQLXWHERE AR_OBJECT=P_WDLX.IF SY-SUBRC<>0.MESSAGE'无此文档类型'TYPE'E'.EXIT.ENDIF.ENDFORM."PER_CHECK_SCREEN*&---------------------------------------------------------------------**&Form PER_GET_P_WQJ*&---------------------------------------------------------------------**读取文件夹*----------------------------------------------------------------------**-->p1text*<--p2text*----------------------------------------------------------------------*FORM PER_GET_P_WQJ.*读取文件夹CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE EXPORTINGWINDOW_TITLE='File Directory'INITIAL_FOLDER='C:\'CHANGINGSELECTED_FOLDER=G_PATH.CALL METHOD CL_GUI_CFW=>FLUSH.CONCATENATE G_PATH''INTO P_WQJ.ENDFORM."PER_GET_P_WQJ*&---------------------------------------------------------------------**&Form PER_GET_WQJ*&---------------------------------------------------------------------**读取文件夹内容*----------------------------------------------------------------------**-->p1text*<--p2text*----------------------------------------------------------------------*FORM PER_GET_WQJ.*读取文件夹内容CLEAR:TAB_G_FILETAB,TAB_G_FILETAB[],G_FILTER.*文件夹路径G_PATH=P_WQJ.*读取文件类型CONCATENATE'*.'G_WQLX INTO G_FILTER.*取出文件夹数据CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES EXPORTINGDIRECTORY=G_PATH"文件夹路径FILTER=G_FILTER"文件类型'*.jpg' CHANGINGFILE_TABLE=TAB_G_FILETAB[]"输入文件COUNT=G_COUNTEXCEPTIONSCNTL_ERROR= 1DIRECTORY_LIST_FILES_FAILED= 2WRONG_PARAMETER= 3ERROR_NO_GUI= 4NOT_SUPPORTED_BY_GUI= 5OTHERS= 6.*判断文件的长度LOOP AT TAB_G_FILETAB.SPLIT TAB_G_FILETAB-FILENAME AT'.'INTO G_FILENAME G_FILEEXT.G_LEN=STRLEN(G_FILENAME).IF G_LEN<>8.MESSAGE E000(OO)WITH'文件名长度必须等于8位'.ENDIF.ENDLOOP.ENDFORM."PER_GET_WQJ*&---------------------------------------------------------------------* *&Form PER_UPLOAD_DATA*&---------------------------------------------------------------------* *text*----------------------------------------------------------------------* *-->p1text*<--p2text*----------------------------------------------------------------------* FORM PER_UPLOAD_DATA.CLEAR:TAB_G_ALVOUT,TAB_G_ALVOUT[].LOOP AT TAB_G_FILETAB.*自动分配流水号CALL FUNCTION'QF05_RANDOM_INTEGER'EXPORTINGRAN_INT_MAX=99999999RAN_INT_MIN= 1IMPORTINGRAN_INT=G_NUMEXCEPTIONSINVALID_INPUT= 1OTHERS= 2.TAB_G_ALVOUT-ZHRSORT=G_NUM.*判断是否有此员工号SELECT SINGLE*FROM PA0001WHERE PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号IF SY-SUBRC=0.*上传路径CONCATENATE G_PATH'\'TAB_G_FILETAB-FILENAME INTO G_SAPPFAD. *上传照片编号CONCATENATE TAB_G_FILETAB-FILENAME+0(8)'0002'INTO G_SAPOBJID. *判断是否可以重复上传IF P_ZHF=''.*判断员工文档类型是否已存在CLEAR:TAB_G_TOAHR.SELECT SINGLE*FROM TOAHRINTO TAB_G_TOAHRWHERE OBJECT_ID=G_SAPOBJID"照片号AND AR_OBJECT=P_WDLX"文档类型AND SAP_OBJECT=P_YWDX."业务对象IF SY-SUBRC=0.TAB_G_ALVOUT-MANDT=SY-MANDT."集团TAB_G_ALVOUT-ZHRUNAME=SY-UNAME."创建人TAB_G_ALVOUT-ZHRDATUM=SY-DATUM."创建日期TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT."创建日间TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号TAB_G_ALVOUT-ZHRYWDX=P_YWDX."文档对象TAB_G_ALVOUT-ZHRWDLX=P_WDLX."文档类型TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD."上传路径TAB_G_ALVOUT-ZHRMSGTY='已存在'.APPEND TAB_G_ALVOUT.CLEAR:TAB_G_ALVOUT.CONTINUE.ENDIF.ENDIF.*上传照片CLEAR:TAB_G_TOAV0,TAB_G_TOAV0[].CALL FUNCTION'ZFUN_HR_ARCHIV_CREATE_FILE'EXPORTINGAR_OBJECT=P_WDLX"文档类型OBJECT_ID=G_SAPOBJID"照片SAP_OBJECT=P_YWDX"业务对象DOC_TYPE=G_WQLX"文件类型PATH=G_SAPPFAD"上传路径TABLESTOAV0=TAB_G_TOAV0"输出ID EXCEPTIONSERROR_CONECTIONTABLE= 1ERROR_PARAMETER= 2ERROR_ARCHIV= 3ERROR_UPLOAD= 4ERROR_KERNEL= 5NO_ENTRY_POSSIBLE= 6ERROR_COMUNICATIONTABLE=7OTHERS=8.IF SY-SUBRC<>0.*上传照片失败CALL FUNCTION'MESSAGE_TEXT_BUILD'EXPORTINGMSGID=SY-MSGIDMSGNR=SY-MSGTYMSGV1=SY-MSGV1MSGV2=SY-MSGV2MSGV3=SY-MSGV3MSGV4=SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT=TAB_G_ALVOUT-ZHRMSGTY.TAB_G_ALVOUT-MANDT=SY-MANDT."集团TAB_G_ALVOUT-ZHRUNAME=SY-UNAME."创建人TAB_G_ALVOUT-ZHRDATUM=SY-DATUM."创建日期TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT."创建日间TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号TAB_G_ALVOUT-ZHRYWDX=P_YWDX."业务对象TAB_G_ALVOUT-ZHRWDLX=P_WDLX."文档类型TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD."上传路径TAB_G_ALVOUT-ZHRMESSAGE='E'.CONCATENATE TAB_G_ALVOUT-ZHRMSGTY'存储上传失败'INTO TAB_G_ALVOUT-ZHRMSGTY.APPEND TAB_G_ALVOUT.ELSE.*上传成功TAB_G_ALVOUT-MANDT=SY-MANDT."集团TAB_G_ALVOUT-ZHRUNAME=SY-UNAME."创建人TAB_G_ALVOUT-ZHRDATUM=SY-DATUM."创建日期TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT."创建日间TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8)."员工号READ TABLE TAB_G_TOAV0INDEX 1.TAB_G_ALVOUT-ZHRID=TAB_G_TOAV0-ARC_DOC_ID."ID号TAB_G_ALVOUT-ZHRYWDX=P_YWDX."业务对象TAB_G_ALVOUT-ZHRWDLX=P_WDLX."文档类型TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD."上传路径TAB_G_ALVOUT-ZHRMESSAGE='S'.TAB_G_ALVOUT-ZHRMSGTY='成功'.APPEND TAB_G_ALVOUT.*取出同一类型不同ID文档CLEAR:TAB_G_TOAHR.SELECT SINGLE*FROM TOAHRINTO TAB_G_TOAHRWHERE OBJECT_ID=G_SAPOBJID"照片号AND AR_OBJECT=P_WDLX"文档类型AND SAP_OBJECT=P_YWDX"业务对象AND ARC_DOC_ID<>TAB_G_ALVOUT-ZHRID."ID文档IF SY-SUBRC=0.*当取出同一类型不同ID文档进行删除CLEAR:G_FILE_NAME.CALL FUNCTION'ARCHIV_DELETE_META'EXPORTINGARCHIV_ID=TAB_G_TOAHR-ARCHIV_ID"内容存储库标识ARC_DOC_ID=TAB_G_TOAHR-ARC_DOC _ID"ID文档AR_OBJECT=P_WDLX"文档类型DELETE_FLAG='3'"删除时是否输出对画,3代表不输出,0代表输出OBJECT_ID=G_SAPOBJID"员工编号+0002文件SAP_OBJECT=P_YWDX"业务对象CLIENT=SY-MANDT"集团DOCUMENTCLASS=G_WQLX"文件类型EXCEPTIONSERROR_CONNECTIONTABLE= 1ERROR_PARAMETER= 2ERROR_ARCHIV= 3ERROR_KERNEL= 4ERROR_COMMUNICATIONTABLE= 5OTHERS= 6.IF SY-SUBRC<>0.*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.ENDIF.ENDIF.ENDIF.ELSE.*此员工编号不存在TAB_G_ALVOUT-MANDT=SY-MANDT.TAB_G_ALVOUT-ZHRUNAME=SY-UNAME.TAB_G_ALVOUT-ZHRDATUM=SY-DATUM.TAB_G_ALVOUT-ZHRUZEIT=SY-UZEIT.TAB_G_ALVOUT-PERNR=TAB_G_FILETAB-FILENAME+0(8).TAB_G_ALVOUT-ZHRYWDX=P_YWDX.TAB_G_ALVOUT-ZHRWDLX=P_WDLX.TAB_G_ALVOUT-ZHRWQJ=G_SAPPFAD.TAB_G_ALVOUT-ZHRMSGTY='此员工编号不存在!'.TAB_G_ALVOUT-ZHRMESSAGE='E'.APPEND TAB_G_ALVOUT.ENDIF.CLEAR:TAB_G_ALVOUT.ENDLOOP.INSERT ZHR_LOG_PA001FROM TABLE TAB_G_ALVOUT. ENDFORM."PER_UPLOAD_DATA*&---------------------------------------------------------------------**&Form PER_ALV_OUT*&---------------------------------------------------------------------* *text*----------------------------------------------------------------------* *-->p1text*<--p2text*----------------------------------------------------------------------* FORM PER_ALV_OUT.REFRESH:G_ALV_FIELDCAT.G_ALV_FIELD-FIELDNAME='ZHRUNAME'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='操作人'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT.CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRDATUM'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='操作日期'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT.CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRUZEIT'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='操作时间'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRSORT'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='序号'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='PERNR'.G_ALV_FIELD-KEY='X'.G_ALV_FIELD-SELTEXT_L='员工号'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRMESSAGE'. G_ALV_FIELD-SELTEXT_L='消息类型'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRMSGTY'. G_ALV_FIELD-SELTEXT_L='消息文本'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRYWDX'.G_ALV_FIELD-SELTEXT_L='业务对象'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRWDLX'.G_ALV_FIELD-SELTEXT_L='文档类型'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRID'.G_ALV_FIELD-SELTEXT_L='对象标识符'. APPEND G_ALV_FIELD TO G_ALV_FIELDCAT. CLEAR:G_ALV_FIELD.G_ALV_FIELD-FIELDNAME='ZHRWQJ'.G_ALV_FIELD-SELTEXT_L='文件名'.APPEND G_ALV_FIELD TO G_ALV_FIELDCAT.CLEAR:G_ALV_FIELD.G_LAYOUT-COLWIDTH_OPTIMIZE='X'.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGI_CALLBACK_PROGRAM=SY-REPIDIS_LAYOUT=G_LAYOUTIT_FIELDCAT=G_ALV_FIELDCAT[]*I_SAVE=G_SAVE*IS_VARIANT=GS_VERIANT*I_CALLBACK_USER_COMMAND='USER_COMMAND' *I_CALLBACK_PF_STATUS_SET='FRM_PF_STATUS_SET' TABLEST_OUTTAB=TAB_G_ALVOUT[]."输出表ENDFORM."PER_ALV_OUTZFUN_HR_ARCHIV_CREATE_FILEFUNCTION ZFUN_HR_ARCHIV_CREATE_FILE.*"--------------------------------------------------------------------*"*"本地接口:*"IMPORTING*"VALUE(AR_OBJECT)LIKE TOAOM-AR_OBJECT *"VALUE(DEL_DATE)LIKE TOA01-DEL_DATE OPTIONAL *"VALUE(OBJECT_ID)LIKE SAPB-SAPOBJID *"VALUE(SAP_OBJECT)LIKE TOAOM-SAP_OBJECT *"VALUE(DOC_TYPE)LIKE TOADD-DOC_TYPE *"VALUE(PATH)LIKE SAPB-SAPPFAD*"TABLES*"TOAV0STRUCTURE TOAV0OPTIONAL *"EXCEPTIONS*"ERROR_CONECTIONTABLE*"ERROR_PARAMETER*"ERROR_ARCHIV*"ERROR_UPLOAD*"ERROR_KERNEL*"NO_ENTRY_POSSIBLE*"ERROR_COMUNICATIONTABLE *"OTHERS*"--------------------------------------------------------------------DATA:BEGIN OF I_TOAOM OCCURS 1.INCLUDE STRUCTURE TOAOM.DATA:END OF I_TOAOM.DATA:BEGIN OF I_TOAV0OCCURS 1.INCLUDE STRUCTURE TOAV0.DATA:END OF I_TOAV0.REFRESH I_TOAOM.I_TOAV0-MANDT=SY-MANDT.I_TOAV0-SAP_OBJECT=SAP_OBJECT.I_TOAV0-OBJECT_ID=OBJECT_ID.I_TOAV0-AR_OBJECT=AR_OBJECT.I_TOAV0-AR_DATE=SY-DATUM.I_TOAV0-DEL_DATE=DEL_DATE.I_TOAV0-RESERVE=DOC_TYPE.**Ermittle Verkn黳fungsinformation*CALL FUNCTION'ARCHIV_METAINFO_GET'EXPORTINGACTIVE_FLAG='X'AR_OBJECT=AR_OBJECTSAP_OBJECT=SAP_OBJECTTABLESTOAOM_FKT=I_TOAOMEXCEPTIONSERROR_CONNECTIONTABLE= 1ERROR_PARAMETER= 2OTHERS= 3.CASE SY-SUBRC.WHEN 1.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_CONECTIONTABLE.WHEN 2.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_PARAMETER.WHEN 3.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING OTHERS.ENDCASE.I_TOAV0-ARCHIV_ID=I_TOAOM-ARCHIV_ID.**archiviere die Datei*CALL FUNCTION'ARCHIVOBJECT_CREATE_FILE'EXPORTINGARCHIV_ID=I_TOAOM-ARCHIV_IDDOCUMENT_TYPE=DOC_TYPEPATH=PATHIMPORTINGARCHIV_DOC_ID=I_TOAV0-ARC_DOC_ID EXCEPTIONSERROR_ARCHIV= 1ERROR_COMMUNICATIONTABLE= 2ERROR_UPLOAD= 3ERROR_KERNEL= 4OTHERS= 5.CASE SY-SUBRC.WHEN 1.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_ARCHIV.WHEN 2.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_COMUNICATIONTABLE.WHEN 3.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_UPLOAD.WHEN 4.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING ERROR_KERNEL.WHEN 5.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING OTHERS.ENDCASE.**schreibe Verkn黳fung*APPEND I_TOAV0.CALL FUNCTION'ARCHIV_CONNECTIONTABLE_INSERT'TABLESENTRYS_CONNECTIONTABLE=I_TOAV0EXCEPTIONSNO_ENTRY_POSSIBLE= 1OTHERS= 2.CASE SY-SUBRC.WHEN 1.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING NO_ENTRY_POSSIBLE.WHEN 2.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4RAISING OTHERS.ENDCASE.CLEAR:TOAV0,TOAV0[].APPEND LINES OF I_TOAV0TO TOAV0. ENDFUNCTION.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
* '</table>'.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = 'c:/a.doc'
CHANGING
data_tab = gt_html.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Downloading to Excel, Please waiting!'.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
* '</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>',
*&---------------------------------------------------------------------*
*& Report ZTEST_001
*&
*&---------------------------------------------------------------------*
ENDIF.
LOOP AT gt_html INTO wa_html.
REPLACE 'A001' WITH 'TEST' INTO wa_html-zhtml .
MODIFY gt_html FROM wa_html.
CLEAR wa_html.
E.
wa_html-zhtml = &1.
append wa_html to gt_html.
clear wa_html.
END-OF-DEFINITION.
l_exceltemplate = 'MIZTEST_001'.
D_FILENAME = 'c:/c.doc'.
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_001.
DATA: l_temp_file(65),
D_FILENAME LIKE rlgrap-filename,
EXPORTING
key = l_exceltemplate
destination = D_FILENAME
CHANGING
temp = l_temp_file.
CALL METHOD cl_gui_frontend_services=>gui_UPLOAD
l_exceltemplate LIKE wwwdatatab.
DATA: BEGIN OF wa_html,
zhtml(255),
END OF wa_html,
gt_html LIKE TABLE OF wa_html.
DATA: v_str TYPE string.
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
IF sy-subrc EQ 0.
write 'OK'.
ELSE.
write 'ER'.
ENDIF.
*appd_html: '<table align="center" 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>',
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
OTHERS = 17.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EXPORTING
FILENAME = 'c:/c.doc'"L_FILENAME_S
CHANGING
DATA_TAB = gt_html
EXCEPTIONS
FILE_OPEN_ERROR = 1