




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 OAOR FTP顾名思义,就是把文件传到FTP上,然后在运行的时候,直接输入文件服务器的路径,把模版在本地打开填制。 T-code SMW0。实际上这是用于Web的一种文件存储,不过我们也可以借用来存储模版。当然建立之前要维护相应的MIME types(先把文件的类型要注册),方可上传此类型的文件。一、OLEABAP通过OLE的方式导出EXCEL,由于数据时一条一条的生成,速度较慢, 不适合内表数据较多的场景使用, 但是其实现起来比较简单。REPORTZTEST1.TABLES:ZWYM. “自定义的一张表TYPE-POOLS:SLIS,ole2. “需要用到OLE2DATA:excelTYPEole2_object,workbookTYPEole2_object,sheetTYPEole2_object,cellTYPEole2_object.DATA:applicationTYPEole2_object,bookTYPEole2_object,booksTYPEole2_object.DATA:ole_bookTYPEole2_object.DATA:FILENAME(100)TYPECVALUED:datatest.xls. “ 定义文件导出的路径DATA:GT_ITABLIKETABLEOFZWYMWITHHEADERLINE.DATA:BEGINOFGT_ITABOCCURS0, “定义内表INCLUDESTRUCTUREZWYM.ENDOFGT_ITAB.SELECTION-SCREEN:BEGINOFBLOCKB1WITHFRAMETITLETEXT-001. “查询条件SELECT-OPTIONS:S_MATNRFORZWYM-MATNR.SELECTION-SCREEN:ENDOFBLOCKB1.START-OF-SELECTION.PERFORMGET_DATA.END-OF-SELECTION.PERFORMgen_excel.FORMGET_DATA. SELECT*INTOCORRESPONDINGFIELDSOFTABLEGT_ITABFROMZWYMWHEREMATNRINS_MATNR.ENDFORM. “GET_DATA.FORMgen_excel.CREATEOBJECTexcelEXCEL.APPLICATION.IFsy-subrcNE0.MESSAGE不能生成EXCEL对象,检查系统是否安装MSEXCEL。TYPEE.STOP.ENDIF.SETPROPERTYOFexcelDisplayAlerts=0.CALLMETHODOFexcelWORKBOOKS=workbook.*PutExcelinbackgroundSETPROPERTYOFexcelVISIBLE=1.*CreateworksheetSETPROPERTYOFexcelSheetsInNewWorkbook=1.CALLMETHODOFworkbookADD.PERFORMgen_item. “此处调用form gen_item 显示EXCEL明细GETPROPERTYOFexcelActiveSheet=sheet.FREEOBJECTsheet.FREEOBJECTworkbook.GETPROPERTYOFexcelActiveWorkbook=workbook.CALLMETHODOFworkbookSAVEASEXPORTING#1=filename “保存路径#2=1.FREEOBJECTsheet.FREEOBJECTworkbook.FREEOBJECTexcel.ENDFORM.gen_excelFORMgen_item.CALLMETHODOFexcelWORKSHEETS=sheet.CALLMETHODOFsheetADD.FREEOBJECTsheet.CALLMETHODOFexcelWORKSHEETS=sheetEXPORTING#1=1.CALLMETHODOFsheetACTIVATE.SETPROPERTYOFsheetNAME=btdata. “导出的EXCEL表单名FREEOBJECTsheet.OKDEFINEc_cell.callmethodofexcelCELLS=cell “定义在excel的位置 1为行 2为列EXPORTING#1=&1#2=&2.END-OF-DEFINITION.DEFINEs_cell.setpropertyofcell&1=&2. “填充值 1为VALUE 2为填充内容END-OF-DEFINITION.*写标题行c_cell11.s_cellVALUE物料号.c_cell12.s_cellVALUE工厂.c_cell13.s_cellVALUE网格值.c_cell14.s_cellVALUE产品名称.c_cell15.s_cellVALUE颜色.c_cell16.s_cellVALUE尺码.DATA:lineTYPEiVALUE1.*写内容行LOOPATGT_ITAB.line=line+1.c_cellline1.s_cell:NumberFormatLocal,VALUEGT_ITAB-matnr.c_cellline2.s_cell:NumberFormatLocal,VALUEGT_ITAB-werks.c_cellline3.s_cell:NumberFormatLocal,VALUEGT_ITAB-J_3ASIZE.c_cellline4.s_cellVALUEGT_ITAB-MAKTX.c_cellline5.s_cell:NumberFormatLocal,VALUEGT_ITAB-J_3AKORD1.c_cellline6.s_cell:NumberFormatLocal,VALUEGT_ITAB-J_3AKORD2.ENDLOOP.ENDFORM.二、DOIABAP 通过DOI可以处理对EXCEL有特殊要求格式的需求。DOI的功能很强大,关于OLE和DOI的区别可以参考/ecathy126/blog/static/1651261562010529103946880/的博客内容。DOI实现起来分为两步1. 上载EXCEL模板TCODE:OAOR下面的可以不用填写进去之后如下图: 左下角点击“创建”选项卡“标准文档类型” “Table template”双击“Table template”弹出文旦导航 选择文件之后在主界面 左上角 3 会显示上载的模板excel模板如下之后就是代码以下是网上下载的代码可以运行(需要在SE51上面创建一个编号100的屏幕 屏幕里面建一个CONTAINER,SE41创建STATUS “SA1”)REPORTZTEST2.TABLES:T001.TYPE-POOLS:SLIS,VRM,SBDST,SOI.引入必要的类型组CONSTANTSDOCUMENT_NAME(30)VALUEtemp.模板名字CONSTANTSINPLACEVALUEX.控制参数,在GUI中显示ExcelDATA:FLAG.DATA:CONTAINERTYPEREFTOCL_GUI_CUSTOM_CONTAINER,容器实例CONTROLTYPEREFTOI_OI_CONTAINER_CONTROL,控制器实例DOCUMENTTYPEREFTOI_OI_DOCUMENT_PROXY,文档操作对象SPREADSHEETTYPEREFTOI_OI_SPREADSHEET,分隔符对象ERRORTYPEREFTOI_OI_ERROR,错误信息ERRORSTYPEREFTOI_OI_ERROROCCURS0WITHHEADERLINE.错误信息*spreadsheetinterfacestructuresforExceldatainputDATA:RANGEITEMTYPESOI_RANGE_ITEM.DATA:RANGESTYPESOI_RANGE_LIST.DATA:EXCEL_INPUTTYPESOI_GENERIC_TABLE.DATA:EXCEL_INPUT_WATYPESOI_GENERIC_ITEM.DATA:INITIALIZED(1),RETCODETYPESOI_RET_STRING.DATA:ITEM_URL(256).存放模板的UrlDATADOCUMENT_TYPE(80).文档类型DATA:EXCEL(80)VALUEExcel.Sheet.DATA:LINE_COUNTTYPEI,COLUMN_COUNTTYPEI.DATA:OK_CODETYPESY-UCOMM,SAVE_OKTYPESY-UCOMM.CLASSC_OI_ERRORSDEFINITIONLOAD.DATA:BEGINOFITABOCCURS0.INCLUDESTRUCTURET001.DATA:ENDOFITAB.SELECT-OPTIONSBUKRSFORT001-BUKRS.START-OF-SELECTION.PERFORMGETDATA.CALLSCREEN100.*&-*&Formgetdata*&-*text*-*-p1text*CLOSE_DOCUMENT.关闭文档FREEDOCUMENT.ENDIF.IFNOTCONTROLISINITIAL.CALLMETHODCONTROL-DESTROY_CONTROL.FREECONTROL.ENDIF.LEAVEPROGRAM.WHENBACK.IFNOTDOCUMENTISINITIAL.CALLMETHODDOCUMENT-CLOSE_DOCUMENT.FREEDOCUMENT.ENDIF.IFNOTCONTROLISINITIAL.CALLMETHODCONTROL-DESTROY_CONTROL.FREECONTROL.ENDIF.SETSCREEN0.quittheprogramsetscreen1000.ENDCASE.ENDMODULE.USER_COMMAND_0100INPUT*&-*&FormCREATE_BASIC_OBJECTS*&-*text*-*-P_APP_NAMEtext*-P_CLASSNAMEtext*-P_CLASSTYPEtext*-P_OBJ_KEYtext*-P_DOCNAMEtext*-*FORMCREATE_BASIC_OBJECTSUSINGP_APP_NAMEP_CLASSNAMEP_CLASSTYPEP_OBJ_KEYP_DOCNAME.CHECKINITIALIZEDISINITIAL.*获取SAPDOI的控制器接口CALLMETHODC_OI_CONTAINER_CONTROL_CREATOR=GET_CONTAINER_CONTROLIMPORTINGCONTROL=CONTROLERROR=ERROR.*checknoerrorsoccuredCALLMETHODERROR-RAISE_MESSAGEEXPORTINGTYPE=E.实例化容器实例CREATEOBJECTCONTAINEREXPORTINGCONTAINER_NAME=CONTAINER.DATAL_APP_NAME(200).IFP_APP_NAMEISINITIAL.L_APP_NAME=TEST.ELSE.L_APP_NAME=P_APP_NAME.ENDIF.初始化控制器的接口CALLMETHODCONTROL-INIT_CONTROLEXPORTINGR3_APPLICATION_NAME=L_APP_NAMEINPLACE_ENABLED=INPLACEINPLACE_SCROLL_DOCUMENTS=XPARENT=CONTAINERREGISTER_ON_CLOSE_EVENT=XREGISTER_ON_CUSTOM_EVENT=XNO_FLUSH=XIMPORTINGERROR=ERRORS.*saveerrorobjectincollectionAPPENDERRORS.CLEARITEM_URL.定义BDS实例变量,用于设置文档信息DATA:BDS_INSTANCETYPEREFTOCL_BDS_DOCUMENT_SET.DATA:DOC_SIGNATURETYPESBDST_SIGNATURE,WA_DOC_SIGNATURELIKELINEOFDOC_SIGNATURE,DOC_COMPONENTSTYPESBDST_COMPONENTS,DOC_URISTYPESBDST_URI,WA_DOC_URISLIKELINEOFDOC_URIS.*以下三个值为Tcode:OAOR里面新建模板文件的参数DATA:DOC_CLASSNAMETYPESBDST_CLASSNAMEVALUEHRFPM_EXCEL_STANDARD,DOC_CLASSTYPETYPESBDST_CLASSTYPEVALUEOT,DOC_OBJECT_KEYTYPESBDST_OBJECT_KEYVALUETEMP.WA_DOC_SIGNATURE-PROP_NAME=DESCRIPTION.DOCUMENT_TYPE=EXCEL.WA_DOC_SIGNATURE-PROP_VALUE=P_DOCNAME.赋给文档名字APPENDWA_DOC_SIGNATURETODOC_SIGNATURE.DOC_SIGNATURE存储了文档信息CREATEOBJECTBDS_INSTANCE.CALLMETHODBDS_INSTANCE-GET_INFO获取文档信息EXPORTINGCLASSNAME=DOC_CLASSNAMECLASSTYPE=DOC_CLASSTYPEOBJECT_KEY=DOC_OBJECT_KEYCHANGINGCOMPONENTS=DOC_COMPONENTSSIGNATURE=DOC_SIGNATURE.CALLMETHODBDS_INSTANCE-GET_WITH_URL获取文档的url地址放到DOC_URIS中EXPORTINGCLASSNAME=DOC_CLASSNAMECLASSTYPE=DOC_CLASSTYPEOBJECT_KEY=DOC_OBJECT_KEYCHANGINGURIS=DOC_URISSIGNATURE=DOC_SIGNATURE.FREEBDS_INSTANCE.释放该对象READTABLEDOC_URISINTOWA_DOC_URISINDEX1.ITEM_URL=WA_DOC_URIS-URI.获取对象的地址*告诉SAPDOI容器开辟一个Excel策略CALLMETHODCONTROL-GET_DOCUMENT_PROXYEXPORTINGDOCUMENT_TYPE=Excel.SheetNO_FLUSH=XIMPORTINGDOCUMENT_PROXY=DOCUMENTERROR=ERRORS.APPENDERRORS.*根据模板地址打开Excel文件CALLMETHODDOCUMENT-OPEN_DOCUMENTEXPORTINGOPEN_INPLACE=INPLACEDOCUMENT_URL=ITEM_URL.DATA:HASTYPEI.CALLMETHODDOCUMENT-HAS_SPREADSHEET_INTERFACEEXPORTINGNO_FLUSH=IMPORTINGIS_AVAILABLE=HASERROR=ERRORS.APPENDERRORS.获取模板文档的表格分割器接口给SPREADSHEETCALLMETHODDOCUMENT-GET_SPREADSHEET_INTERFACEEXPORTINGNO_FLUSH=IMPORTINGSHEET_INTERFACE=SPREADSHEETERROR=ERRORS.APPENDERRORS.*激活第一个sheetCALLMETHODSPREADSHEET-SELECT_SHEETEXPORTINGNAME=表整理*NO_FLUSH=IMPORTINGERROR=ERRORS.*RETCODE=.APPENDERRORS.LOOPATERRORS.CALLMETHODERRORS-RAISE_MESSAGEEXPORTINGTYPE=E.ENDLOOP.FREEERRORS.INITIALIZED=X.ENDFORM.CREATE_BASIC_OBJECTS*&-*&Formoutput_to_excel*&-*filltheEXCELsheet*-*FORMOUTPUT_TO_EXCEL.DATANUMTYPEIVALUE0.LOOPATITAB.NUM=SY-TABIX+2.PERFORMFILL_CELLUSINGNUM1ITAB-BUKRS.行列值PERFORMFILL_CELLUSINGNUM2ITAB-SPRAS.PERFORMFILL_CELLUSINGNUM3ITAB-BUTXT.ENDLOOP.ENDFORM.output_to_excel*&-*&FormFILL_CELL*&-*text*-*-Itext*-Jtext*-VALtext*-*FORMFILL_CELLUSINGIJVAL.DATA:COLUMNS_NUMBERTYPEI,ROWS_NUMBERTYPEI.COLUMNS_NUMBER=1.ROWS_NUMBER=1.CALLMETHODSPR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业保险投保与风险管理合同
- 科学温度及温度计课件
- 设计流程项目管理标准化框架优化版
- 老男孩培训linux 课件
- 叙事作文春游活动600字(7篇)
- 读幸运饼干有感500字(14篇)
- 门急诊输液护理
- 药剂科培训知识课件
- 品牌授权使用合同及授权范围说明
- 国际跳棋培训课件下载
- (2025秋新版)二年级上册道德与法治全册教案
- 《小学五年级语文开学第一课》课件
- 2025四川泸州市江阳区医疗卫生辅助岗位招募25人考试模拟试题及答案解析
- 矿山设备安全知识培训课件
- 2025年大学英语六级写作与翻译练习题及详解
- 基础装修专业知识培训课件
- 海军用电安全知识培训课件
- 2025年大队委选拔笔试题目及答案
- 2025-2026学年人教PEP版(2024)小学英语四年级上册教学计划及进度表
- 血管外科常用药物
- 数据中心机房空调系统设计方案
评论
0/150
提交评论