当前位置:文档之家› ABAP_EXCEL导出数据

ABAP_EXCEL导出数据

使用EXCEL导出数据要完成使用EXCEL导出数据,基本分为两布:1 建立excel模版2 在程序中整理要输出的数据,并完成最终的输出1 建立excel模版1.1 在本地建立一个excel设置模版的格式,在本例中,模版格式如下:1.2 使用Tcode:OROA,将模版导入SAP系统1.2.1 输入Tcode:OROA注:其他字段可以不填1.2.2 导入模版1.2.2.1 导入模版Create——>standard.doc.types ——> table template1.2.2.2 选择要导入的模版1.2.2.3 输入模版信息——描述和语言1.2.2.5 导入模版之后,在屏幕左上角会添加模版2. 程序中整理数据,并调用模版输出2.1 整理数据,并调用屏幕SELECT * FROM zlhjtestINTO CORRESPONDING FIELDS OF TABLE l_itab_stu. CALL SCREEN0100.2.2 输出屏幕2.2.1 输出屏幕之前,调用模版SET PF-STATUS 'STAN1'.PERFORM create_basic_objects USING'''''''' document_name. PERFORM output_to_excel.2.2.2 输出屏幕之后,根据用户选择做出反应实现这些功能的的代码,如下:REPORT zlhjtest_abavn.TYPE-POOLS:slis,vrm,soi.TYPES:BEGIN OF l_hh,BSART LIKE T161-BSART,batxt TYPE t161t-batxt,END OF l_hh.DATA: ok_code TYPE sy-ucomm,save_ok TYPE sy-ucomm.DATA: flag TYPE c,initialized TYPE c,item_url(256) TYPE c,app TYPE vrm_id,excel(80) VALUE'Excel.Sheet',v_title1(60) TYPE c VALUE'制作人:李红娟'.DATA: rangeitem TYPE soi_range_item,ranges TYPE soi_range_list.DATA: excel_input TYPE soi_generic_table,excel_input_wa TYPE soi_generic_item.DATA: document_type(80) TYPE c,container TYPE REF TO cl_gui_custom_container,control TYPE REF TO i_oi_container_control,document TYPE REF TO i_oi_document_proxy,spreadshee TYPE REF TO i_oi_spreadsheet,error TYPE REF TO i_oi_error,errors TYPE REF TO i_oi_errorOCCURS0WITH HEADER LINE. DATA: l_itab_stu TYPE TABLE OF t161t,l_wa_stu TYPE t161t.CONSTANTS:document_name(30) VALUE'学生信息表', "inplace VALUE'X'.1. 选择数据SELECT * FROM zlhjtestINTO CORRESPONDING FIELDS OF TABLE l_itab_stu.2 调用输出屏幕CALL SCREEN0100.*******************下面是子程序******************************&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE status_0100 OUTPUT.SET PF-STATUS 'STAN1'.PERFORM create_basic_objects USING'''''''' document_name. PERFORM output_to_excel.ENDMODULE. " STATUS_0100 OUTPUT*&---------------------------------------------------------------------**& Form create_basic_objects*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_0130 text* -->P_0131 text* -->P_0132 text* -->P_0133 text* -->P_DOCUMENT_NAME text*----------------------------------------------------------------------*FORM create_basic_objects USING p_app_namep_classnamep_classtypep_obj_keyp_docname.DATA: l_app_name(200).CHECK initialized IS INITIAL.CALL METHODc_oi_container_control_creator=>get_container_controlIMPORTINGcontrol = controlerror = error.CALL METHOD error->raise_messageEXPORTINGtype = 'E'.CREATE OBJECT containerEXPORTINGcontainer_name = 'CONTAINER_NAME'. "输入屏幕0100的"容器“元素名IF p_app_name IS INITIAL.l_app_name = 'TEST1'.ELSE.l_app_name = p_app_name.ENDIF.CALL METHOD control->init_controlEXPORTINGr3_application_name = l_app_nameinplace_enabled = inplaceinplace_scroll_documents = 'X'"parent = containerregister_on_close_event = 'X'register_on_custom_event = 'X'no_flush = 'X'IMPORTINGerror = errors.APPEND errors.* save error object in collectionAPPEND errors.CLEAR item_url.DATA: bds_instance TYPE REF TO cl_bds_document_set. DATA: doc_signature TYPE sbdst_signature,wa_doc_signature LIKE LINE OF doc_signature,doc_components TYPE sbdst_components,doc_uris TYPE sbdst_uri,wa_doc_uris LIKE LINE OF doc_uris.*以下三个值为Tcode:OAOR里面新建模板文件的参数********************************DATA:doc_classname TYPE sbdst_classname VALUE'PICTURES', doc_classtype TYPE sbdst_classtype VALUE'OT',doc_object_key TYPE sbdst_object_keyVALUE'ZLHJEXCELTEMPLATE'."定义对象的key wa_doc_signature-prop_name = 'DESCRIPTION'.app = 'excel'.IF app = 'excel'.document_type = excel.wa_doc_signature-prop_value = p_docname.ELSE.ENDIF.APPEND wa_doc_signature TO doc_signature.CREATE OBJECT bds_instance.CALL METHOD bds_instance->get_infoEXPORTINGclassname = doc_classnameclasstype = doc_classtypeobject_key = doc_object_keyCHANGINGcomponents = doc_componentssignature = doc_signature.CALL METHOD bds_instance->get_with_urlEXPORTINGclassname = doc_classnameclasstype = doc_classtypeobject_key = doc_object_keyCHANGINGuris = doc_urissignature = doc_signature.FREE bds_instance.READ TABLE doc_uris INTO wa_doc_uris INDEX1.item_url = wa_doc_uris-uri.* ask the SAP DOI container for a i_oi_document_proxy for Excel CALL METHOD control->get_document_proxyEXPORTINGdocument_type = document_typeno_flush = 'X'IMPORTINGdocument_proxy = documenterror = errors.APPEND errors.* open a document saved in business document service. CALL METHOD document->open_documentEXPORTINGopen_inplace = inplacedocument_url = item_url.DATA: has TYPE i.CALL METHOD document->has_spreadsheet_interface EXPORTINGno_flush = ''IMPORTINGis_available = haserror = errors.APPEND errors.CALL METHOD document->get_spreadsheet_interface EXPORTINGno_flush = ' 'IMPORTINGsheet_interface = spreadsheeterror = errors.APPEND errors.* Activate sheet 1CALL METHOD spreadsheet->select_sheetEXPORTINGname = '表整理'* NO_FLUSH = ' 'IMPORTINGerror = errors.APPEND errors.LOOP AT errors.CALL METHOD errors->raise_messageEXPORTINGtype = 'E'.ENDLOOP.FREE errors.initialized = 'X'.ENDFORM. " create_basic_objects*&---------------------------------------------------------------------* *& Form output_to_excel*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* * --> p1 text* <-- p2 text*----------------------------------------------------------------------* FORM output_to_excel .perform fill_cell using21 v_title1.DATA: num TYPE i.num = 5.LOOP AT l_itab_stu INTO l_wa_stu .PERFORM fill_cell USING num 1 num .PERFORM fill_cell USING num 2 l_wa_stu-SPRAS .PERFORM fill_cell USING num 3 l_wa_stu-BSART.PERFORM fill_cell USING num 4 l_wa_stu-batxt.* PERFORM fill_cell USING num 2 l_wa_stu-sno .* PERFORM fill_cell USING num 3 l_wa_stu-sname. * PERFORM fill_cell USING num 4 l_wa_stu-ssex.num = num + 1.ENDLOOP.ENDFORM. " output_to_excel*&---------------------------------------------------------------------* *& Form fill_cell*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* * -->P_2 text* -->P_1 text* -->P_V_TITLE1 text*----------------------------------------------------------------------* FORM fill_cell USING i j value.DATA: columns_number TYPE i,rows_number TYPE i.columns_number = 1.rows_number = 1.CALL METHOD spreadsheet->insert_range_dimEXPORTINGname = 'cell'no_flush = 'X'top = ileft = jrows = rows_numbercolumns = columns_numberIMPORTINGerror = errors.APPEND errors.REFRESH: ranges, excel_input.rangeitem-name = 'cell'.rangeitem-columns = 1.rangeitem-rows = 1.APPEND rangeitem TO ranges.excel_input_wa-column = 1.excel_input_wa-row = 1.excel_input_wa-value = value.APPEND excel_input_wa TO excel_input.* set dataCALL METHOD spreadsheet->set_ranges_dataEXPORTINGranges = rangescontents = excel_inputno_flush = 'X'IMPORTINGerror = errors.APPEND errors.CALL METHOD spreadsheet->fit_widestEXPORTINGname = spaceno_flush = 'X'.REFRESH: ranges, excel_input.ENDFORM. " fill_cell*&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------*MODULE user_command_0100 INPUT.flag = 'X'.save_ok = ok_code.CLEAR ok_code.CASE save_ok.WHEN'&F12'OR'&F15'. "'STOP' .IF NOT document IS INITIAL.CALL METHOD document->close_document.FREE document.ENDIF.IF NOT control IS INITIAL.CALL METHOD control->destroy_control.FREE control.ENDIF.LEAVE PROGRAM.WHEN'&F03'. "'BACK' .IF NOT document IS INITIAL.CALL METHOD document->close_document.FREE document.ENDIF.IF NOT control IS INITIAL.CALL METHOD control->destroy_control.FREE control.ENDIF.SET SCREEN0. " quit the program"set screen 1000.ENDCASE.ENDMODULE. " USER_COMMAND_0100 INPUT。

相关主题