1 *&---------------------------------------------------------------------* 2 *& Report Z3426EXCEL002 3 *&---------------------------------------------------------------------* 4 *& 5 *&---------------------------------------------------------------------* 6 REPORT z3426excel005. 7 8 DATA:gv_xcontent TYPE xstring. 9 SELECT * INTO TABLE @DATA(lt_bp) FROM but000 UP TO 100 ROWS. 10 PERFORM frm_tabconvxtr TABLES lt_bp[]. 11 PERFORM frm_upload_to_http. 12 13 FORM frm_tabconvxtr TABLES pt_data. 14 DATA:lw_tab_ref TYPE REF TO data. 15 CREATE DATA lw_tab_ref LIKE LINE OF pt_data. 16 17 DATA:ls_mime TYPE w3mime, 18 lt_mime TYPE TABLE OF w3mime, 19 filesize TYPE string, 20 filesizei TYPE i, 21 lv_xstring TYPE xstring, 22 fileext TYPE char20, 23 ls_key TYPE wwwdatatab. 24 25 ls_key-relid = 'MI'. 26 ls_key-objid = 'XXXXXX'. 27 SELECT * FROM wwwparams INTO TABLE @DATA(lt_wwwparam) 28 WHERE relid = @ls_key-relid 29 AND objid = @ls_key-objid. 30 TRY. 31 LOOP AT lt_wwwparam INTO DATA(ls_wwwparam). 32 CASE ls_wwwparam-name. 33 WHEN 'filesize'. 34 filesizei = filesize = ls_wwwparam-value. 35 CONDENSE filesize NO-GAPS. 36 WHEN 'fileextension'. 37 fileext = ls_wwwparam-value. 38 ENDCASE. 39 ENDLOOP. 40 ********************************************************************** 41 * 获取SMW0的数据 42 CALL FUNCTION 'WWWDATA_IMPORT' 43 EXPORTING 44 key = ls_key 45 TABLES 46 mime = lt_mime 47 EXCEPTIONS 48 wrong_object_type = 1 49 import_error = 2 50 OTHERS = 99. 51 52 CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' 53 EXPORTING 54 input_length = filesizei 55 IMPORTING 56 buffer = lv_xstring 57 TABLES 58 binary_tab = lt_mime 59 EXCEPTIONS 60 failed = 1 61 OTHERS = 2. 62 ********************************************************************** 63 DATA(xlsx_handling) = cl_ehfnd_xlsx=>get_instance( )."xlsx 句柄 64 DATA(xlsx_document) = xlsx_handling->load_doc( lv_xstring )."xlsx 文件 65 DATA(xlsx_sheets) = xlsx_document->get_sheets( )."得到sheets 66 DATA(first_xlsx_sheet) = xlsx_document->get_sheet_by_id( xlsx_sheets[ 1 ]-sheet_id )."得到sheet 67 first_xlsx_sheet->change_sheet_name( 'Sheet_first' )."设置sheet的名称 68 DO 2 TIMES. 69 DATA(lv_row) = sy-index + 3."从第三行起,开始写数据 70 DO 10 TIMES. 71 DATA(lv_column) = sy-index. 72 IF first_xlsx_sheet->has_cell_content( iv_row = lv_row iv_column = lv_column ). 73 ELSE. 74 first_xlsx_sheet->set_cell_content( iv_row = lv_row iv_column = lv_column iv_value = '测试数据!' ). 75 ENDIF. 76 77 ENDDO. 78 ENDDO. 79 80 gv_xcontent = xlsx_document->save( ). 81 CATCH cx_openxml_format INTO DATA(openxml_format_exception). 82 MESSAGE e001(00) RAISING file_export_error 83 WITH 'Error occurs when constructing excel file instance.'." cx_openxml_format. 84 CATCH cx_openxml_not_found INTO DATA(openxml_not_found_exception). 85 MESSAGE e001(00) RAISING file_export_error 86 WITH ' Error occurs when constructing excel file instance.' "CX_OPENXML_NOT_FOUND |. 87 . 88 CATCH cx_openxml_not_allowed INTO DATA(openxml_not_allowed_exception). 89 MESSAGE e001(00) RAISING file_export_error 90 WITH 'Error occurs when constructing excel file instance.'" CX_OPENXML_NOT_ALLOWED |. 91 . 92 ENDTRY. 93 94 "cl_scp_change_db=>xstr_to_xtab( EXPORTING im_xstring = filecontent IMPORTING ex_xtab = pt_xtab[] ). 95 "length = xstrlen( filecontent ). 96 "pv_xtab[] = l_binary_tab[]. 97 "length = l_length. 98 ENDFORM. 99 100 FORM frm_upload_to_http . 101 DATA:lo_response TYPE REF TO if_http_response, 102 lv_hostname TYPE string, 103 lv_port TYPE string. 104 105 CREATE OBJECT lo_response TYPE cl_http_response EXPORTING add_c_msg = 1. 106 lo_response->set_data( gv_xcontent ). 107 lo_response->set_header_field( name = if_http_header_fields=>content_type value = '.xlsx' ). 108 lo_response->set_status( code = 200 reason = 'OK' ). 109 lo_response->server_cache_expire_rel( expires_rel = 600 ). 110 111 CALL FUNCTION 'TH_GET_VIRT_HOST_DATA' 112 EXPORTING 113 protocol = 0 114 virt_idx = 0 115 IMPORTING 116 hostname = lv_hostname 117 port = lv_port. 118 119 DATA(lv_guid) = cl_system_uuid=>create_uuid_x16_static( ). 120 DATA(lv_url) = |http://{ lv_hostname }:{ lv_port }/sap/public/{ lv_guid }.xlsx|. 121 cl_http_server=>server_cache_upload( url = lv_url response = lo_response ). 122 cl_gui_frontend_services=>execute( document = lv_url ). 123 FREE lo_response. 124 ENDFORM.