ABAP中DOI的实现Word下载.docx
《ABAP中DOI的实现Word下载.docx》由会员分享,可在线阅读,更多相关《ABAP中DOI的实现Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
FLAG.
CONTAINERTYPEREFTOCL_GUI_CUSTOM_CONTAINER,"
容器实例
CONTROLTYPEREFTOI_OI_CONTAINER_CONTROL,"
控制器实例
DOCUMENTTYPEREFTOI_OI_DOCUMENT_PROXY,"
文档操作对象
SPREADSHEETTYPEREFTOI_OI_SPREADSHEET,"
分隔符对象
ERRORTYPEREFTOI_OI_ERROR,"
错误信息
ERRORSTYPEREFTOI_OI_ERROROCCURS0WITHHEADERLINE."
*spreadsheetinterfacestructuresforExceldatainput
RANGEITEMTYPESOI_RANGE_ITEM.
RANGESTYPESOI_RANGE_LIST.
EXCEL_INPUTTYPESOI_GENERIC_TABLE.
EXCEL_INPUT_WATYPESOI_GENERIC_ITEM.
INITIALIZED
(1),RETCODETYPESOI_RET_STRING.
ITEM_URL(256)."
存放模板的Url
DATADOCUMENT_TYPE(80)."
文档类型
EXCEL(80)VALUE'
Excel.Sheet'
.
LINE_COUNTTYPEI,
COLUMN_COUNTTYPEI.
OK_CODETYPESY-UCOMM,
SAVE_OKTYPESY-UCOMM.
CLASSC_OI_ERRORSDEFINITIONLOAD.
BEGINOFITABOCCURS0.
INCLUDESTRUCTURET001.
ENDOFITAB.
SELECT-OPTIONSBUKRSFORT001-BUKRS.
START-OF-SELECTION.
PERFORMGETDATA.
CALLSCREEN100.
Formgetdata
*text
*----------------------------------------------------------------------*
*-->
p1text
*<
--p2text
FORMGETDATA.
SELECT*
FROMT001
INTOTABLEITAB
WHEREBUKRSINBUKRS.
ENDFORM."
getdata
ModuleSTATUS_0100OUTPUT
MODULESTATUS_0100OUTPUT.
SETPF-STATUS'
SA1'
IFFLAG=SPACE.
PERFORMCREATE_BASIC_OBJECTSUSING'
'
'
DOCUMENT_NAME.
PERFORMOUTPUT_TO_EXCEL.
ENDIF.
ENDMODULE."
STATUS_0100OUTPUT
ModuleUSER_COMMAND_0100INPUT
MODULEUSER_COMMAND_0100INPUT.
FLAG='
SAVE_OK=OK_CODE.
CLEAROK_CODE.
CASESAVE_OK.
WHEN'
CANCLE'
.
IFNOTDOCUMENTISINITIAL.
CALLMETHODDOCUMENT->
CLOSE_DOCUMENT."
关闭文档
FREEDOCUMENT.
IFNOTCONTROLISINITIAL.
CALLMETHODCONTROL->
DESTROY_CONTROL.
FREECONTROL.
LEAVEPROGRAM.
BACK'
CLOSE_DOCUMENT.
SETSCREEN0."
quittheprogram
"
setscreen1000.
ENDCASE.
USER_COMMAND_0100INPUT
FormCREATE_BASIC_OBJECTS
P_APP_NAMEtext
P_CLASSNAMEtext
P_CLASSTYPEtext
P_OBJ_KEYtext
P_DOCNAMEtext
FORMCREATE_BASIC_OBJECTSUSINGP_APP_NAME
P_CLASSNAME
P_CLASSTYPE
P_OBJ_KEY
P_DOCNAME.
CHECKINITIALIZEDISINITIAL.
*获取SAPDOI的控制器接口
CALLMETHOD
C_OI_CONTAINER_CONTROL_CREATOR=>
GET_CONTAINER_CONTROL
IMPORTING
CONTROL=CONTROL
ERROR=ERROR.
*checknoerrorsoccured
CALLMETHODERROR->
RAISE_MESSAGE
EXPORTING
TYPE='
E'
实例化容器实例
CREATEOBJECTCONTAINER
CONTAINER_NAME='
CONTAINER'
DATAL_APP_NAME(200).
IFP_APP_NAMEISINITIAL.
L_APP_NAME='
TEST'
ELSE.
L_APP_NAME=P_APP_NAME.
初始化控制器的接口
INIT_CONTROL
R3_APPLICATION_NAME=L_APP_NAME
INPLACE_ENABLED=INPLACE
INPLACE_SCROLL_DOCUMENTS='
PARENT=CONTAINER
REGISTER_ON_CLOSE_EVENT='
REGISTER_ON_CUSTOM_EVENT='
NO_FLUSH='
ERROR=ERRORS.
*saveerrorobjectincollection
APPENDERRORS.
CLEARITEM_URL.
定义BDS实例变量,用于设置文档信息
BDS_INSTANCETYPEREFTOCL_BDS_DOCUMENT_SET.
DOC_SIGNATURETYPESBDST_SIGNATURE,
WA_DOC_SIGNATURELIKELINEOFDOC_SIGNATURE,
DOC_COMPONENTSTYPESBDST_COMPONENTS,
DOC_URISTYPESBDST_URI,
WA_DOC_URISLIKELINEOFDOC_URIS.
*以下三个值为Tcode:
OAOR里面新建模板文件的参数
DOC_CLASSNAMETYPESBDST_CLASSNAMEVALUE'
HRFPM_EXCEL_STANDARD'
DOC_CLASSTYPETYPESBDST_CLASSTYPEVALUE'
OT'
DOC_OBJECT_KEYTYPESBDST_OBJECT_KEYVALUE'
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"
获取文档信息
CLASSNAME=DOC_CLASSNAME
CLASSTYPE=DOC_CLASSTYPE
OBJECT_KEY=DOC_OBJECT_KEY
CHANGING
COMPONENTS=DOC_COMPONENTS
SIGNATURE=DOC_SIGNATURE.
GET_WITH_URL"
获取文档的url地址放到DOC_URIS中
URIS=DOC_URIS
FREEBDS_INSTANCE."
释放该对象
READTABLEDOC_URISINTOWA_DOC_URISINDEX1.
ITEM_URL=WA_DOC_URIS-URI."
获取对象的地址
*告诉SAPDOI容器开辟一个Excel策略
GET_DOCUMENT_PROXY
DOCUMENT_TYPE='
DOCUMENT_PROXY=DOCUMENT
*根据模板地址打开Excel文件
OPEN_DOCUMENT
OPEN_INPLACE=INPLACE
DOCUMENT_URL=ITEM_URL.
HASTYPEI.
HAS_SPREADSHEET_INTERFACE
IS_AVAILABLE=HAS
获取模板文档的表格分割器接口给SPREADSHEET
GET_SPREADSHEET_INTERFACE
SHEET_INTERFACE=SPREADSHEET
*激活第一个sheet
CALLMETHODSPREADSHEET->
SELECT_SHEET
NAME='
表整理'
*NO_FLUSH='
*RETCODE=
LOOPATERRORS.
CALLMETHODERRORS->
EXPORTING
TYPE='
ENDLOOP.
FREEERRORS.
INITIALIZED='
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.
output_to_excel
FormFILL_CELL
Itext
Jtext
VALtext
FORMFILL_CELLUSINGIJVAL.
COLUMNS_NUMBERTYPEI,
ROWS_NUMBERTYPEI.
COLUMNS_NUMBER=1.
ROWS_NUMBER=1.
INSERT_RANGE_DIM
cell'
TOP=I
LEFT=J
ROWS=ROWS_NUMBER
COLUMNS=COLUMNS_NUMBER
REFRESH:
RANGES,EXCEL_INPUT.
RANGEITEM-NAME='
RANGEITEM-COLUMNS=1.
RANGEITEM-ROWS=1.
APPENDRANGEITEMTORANGES.
EXCEL_INPUT_WA-COLUMN=1.
EXCEL_INPUT_WA-ROW=1.
EXCEL_INPUT_WA-VALUE=VAL.
APPENDEXCEL_INPUT_WATOEXCEL_INPUT.
*setdata
SET_RANGES_DATA
RANGES=RANGES
CONTENTS=EXCEL_INPUT
FIT_WIDEST
NAME=SPACE
fill_cell
DOI必须放在自定义屏幕的一个Container中。
最终的运行结果如图: