用OLE DOI 实现ABAP导出EXCEL表格Word格式文档下载.docx
- 文档编号:8613495
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:14
- 大小:19.02KB
用OLE DOI 实现ABAP导出EXCEL表格Word格式文档下载.docx
《用OLE DOI 实现ABAP导出EXCEL表格Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《用OLE DOI 实现ABAP导出EXCEL表格Word格式文档下载.docx(14页珍藏版)》请在冰点文库上搜索。
你要输出的内容
GETPROPERTYOFMYEXCEL'
ACTIVESHEET'
=MYSHEET.
ACTIVEWORKBOOK'
*保存文件
SAVEAS'
EXPORTING#1='
C:
\TMP\AA.XLS'
#2=1.
CLOSE'
*退出excel
QUIT'
*释放对象
FREEOBJECTMYSHEET.
FREEOBJECTMYWORKBOOK.
FREEOBJECTMYEXCEL.
*******************************************************************************
实例:
TYPE-POOLS:
ole2,
slis.
DEFINEadd_field.
wa_field-fieldname=&
1.
wa_field-reptext_ddic=&
2.
wa_field-no_zero='
X'
."
去掉0
*WA_FIELD_EIDT='
.
appendwa_fieldtoit_field.
END-OF-DEFINITION.
*定义变量和字段组
DATA:
g_repidTYPEsy-repid,
gs_layoutTYPEslis_layout_alv,
wa_fieldTYPEslis_fieldcat_alv,
it_fieldTYPEslis_t_fieldcat_alv.
*OLEEXCEL变量
excelTYPEole2_object,
workbookTYPEole2_object,
sheetTYPEole2_object,
cellTYPEole2_object.
*CELL1TYPEOLE2_OBJECT,
*COLUMNTYPEOLE2_OBJECT,
*RANGETYPEOLE2_OBJECT,
*BORDERSTYPEOLE2_OBJECT,
*buttonTYPEOLE2_OBJECT,
*intTYPEOLE2_OBJECT,
*FONTTYPEOLE2_OBJECT.
*ROWTYPEOLE2_OBJECT.
*填充单元格
FORMfill_cellUSINGijval.
*CALLMETHODOFEXCEL'
COLUMNS'
=COLUMN.
*CALLMETHODOFCOLUMN'
AUTOFIT'
导出EXCEL自动适应宽度
CALLMETHODOFexcel'
=cellNOFLUSHEXPORTING#1=i#2=j.
SETPROPERTYOFcell'
=valnoflush.
FREEOBJECTcellNOFLUSH.
*GETPROPERTYOFCELL'
FONT'
=FONT.
*SETPROPERTYOFFONT'
BOLD'
=BOLD.
ENDFORM."
FILL_CELL
*处理进度条
FORMp_processUSINGi_processedLIKEsy-tabix
i_totalLIKEsy-tabix.
DATA:
i_percentTYPEi,
i_text2(72)TYPEc,
i_timesTYPEi,
i_proc(10)TYPEc.
i_times=0.
i_percent=(i_processed*100)DIVi_total.
i_times=(i_percent-STRLEN(i_proc))DIV10.
DOi_timesTIMES.
CONCATENATEi_proc'
■'
INTOi_proc.
CONDENSEi_proc.
ENDDO.
IFi_percent>
0.
WRITEi_percentTOi_text2.
CONDENSEi_text2.
CONCATENATEi_text2'
%'
i_procINTOi_text2.
ENDIF.
CONCATENATE'
正在导出EXCEL,目前的进度为'
i_text2INTOi_text2SEPARATEDBYspace."
合并文本
CONDENSEi_text2."
缩进文本
*启动指示钟
CALLFUNCTION'
SAPGUI_PROGRESS_INDICATOR'
EXPORTING
*PERCENTAGE=I_PERCENT
text=i_text2
EXCEPTIONS
OTHERS=1
.
P_PROCESS
DOI:
推荐用DOI方式导数据到Excel,而不要用OLE,DOI是调用SAP自带的类来操作的,可控性更高,并且可以把Excel窗口当作一个片屏幕控件放入屏幕的容器中。
具体请参考:
DOI功能很强大,可以做到很多功能,而且可以使用VBA扩展新功能,比如可以做出如下图效果:
更多的东西请看在线帮助里"
TheSpreadsheetInterface"
一章,有详细的结构定义和方法说明。
运行报表前首先要在事务代码OAOR里面新建一个Excel模板,然后调用DOI的类把这个程序调出来后写入数据。
给一个简单的DOI模板,这个模板是单元格一格一格填充的,其实可以一块一起填充。
*&
---------------------------------------------------------------------*
ReportZ_Rocky_TEST
RockyWang
RockyTech(AT)
RockT
REPORTz_rocky_test.
TABLES:
makt.
***-----------------------------------***
***excelrelateddeclaring
TYPE-POOLS:
slis,vrm,sbdst,soi.
CONSTANTSdocument_name(30)VALUE'
TEST'
CONSTANTSinplaceVALUE'
flag.
containerTYPEREFTOcl_gui_custom_container,
controlTYPEREFTOi_oi_container_control,
documentTYPEREFTOi_oi_document_proxy,
spreadsheetTYPEREFTOi_oi_spreadsheet,
errorTYPEREFTOi_oi_error,
errorsTYPEREFTOi_oi_errorOCCURS0WITHHEADERLINE.
CONTROLS:
exceldataTYPETABLEVIEWUSINGSCREEN0100.
tablename(10),okcode(15),
row(4),column(4),data(39).
*spreadsheetinterfacestructuresforExceldatainput
rangeitemTYPEsoi_range_item.
rangesTYPEsoi_range_list.
excel_inputTYPEsoi_generic_table.
excel_input_waTYPEsoi_generic_item.
initialized
(1),retcodeTYPEsoi_ret_string.
item_url(256),already_done,newname(40).
DATAdocument_type(80).
appTYPEvrm_id,applistTYPEvrm_values.
excel(80)VALUE'
Excel.Sheet'
line_countTYPEi,
column_countTYPEi.
ok_codeTYPEsy-ucomm,
save_okTYPEsy-ucomm.
CLASSc_oi_errorsDEFINITIONLOAD.
BEGINOFitabOCCURS0.
INCLUDESTRUCTUREmakt.
ENDOFitab.
SELECT-OPTIONSmatnrFORmakt-matnr.
START-OF-SELECTION.
PERFORMgetdata.
CALLSCREEN100.
---------------------------------------------------------------------*
Formgetdata
*text
*----------------------------------------------------------------------*
*-->
p1text
*<
--p2text
FORMgetdata.
SELECT*
FROMmakt
INTOTABLEitab
WHEREmakt~matnrINmatnr.
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'
STOP'
IFNOTdocumentISINITIAL.
CALLMETHODdocument->
close_document.
FREEdocument.
IFNOTcontrolISINITIAL.
CALLMETHODcontrol->
destroy_control.
FREEcontrol.
LEAVEPROGRAM.
BACK'
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.
*firstgettheSAPDOIi_oi_container_controlinterface
CALLMETHOD
c_oi_container_control_creator=>
get_container_control
IMPORTING
control=control
error=error.
*checknoerrorsoccured
CALLMETHODerror->
raise_message
EXPORTING
type='
E'
CREATEOBJECTcontainer
EXPORTINGcontainer_name='
CONTAINER'
DATAl_app_name(200).
IFp_app_nameISINITIAL.
l_app_name='
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.
DATA:
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'
PICTURES'
doc_classtypeTYPEsbdst_classtypeVALUE'
OT'
doc_object_keyTYPEsbdst_object_keyVALUE'
ZEXCEL'
wa_doc_signature-prop_name='
DESCRIPTION'
app='
excel'
IFapp='
document_type=excel.
wa_doc_signature-prop_value=p_docname.
APPENDwa_doc_signatureTOdoc_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
uris=doc_uris
FREEbds_instance.
READTABLEdoc_urisINTOwa_doc_urisINDEX1.
item_url=wa_doc_uris-uri.
*asktheSAPDOIcontainerforai_oi_document_proxyforExcel
get_document_proxy
document_type='
document_proxy=document
*openadocumentsavedinbusinessdocumentservice.
open_document
open_inplace=inplace
document_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用OLE DOI 实现ABAP导出EXCEL表格 OLE 实现 ABAP 导出 EXCEL 表格