先看这个 report 执行的成果:关上本地 1.xlsx excel 文件:

这个 Excel 内容如下:

应用 get_ranges_data 办法,胜利读取 Excel 的数据如下:

本例残缺代码如下:

*&---------------------------------------------------------------------**& Report  Z_IMPORT*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT  Z_IMPORT.DATA:oref_container   TYPE REF TO cl_gui_custom_container,iref_control     TYPE REF TO i_oi_container_control,iref_document    TYPE REF TO i_oi_document_proxy,iref_spreadsheet TYPE REF TO i_oi_spreadsheet,iref_error       TYPE REF TO i_oi_error.DATA:v_document_url TYPE c LENGTH 256,i_sheets TYPE soi_sheets_table,wa_sheets TYPE soi_sheets,i_data        TYPE soi_generic_table,wa_data       TYPE soi_generic_item,i_ranges      TYPE soi_range_list,i_total       TYPE i,p_cols        TYPE i value 2.PARAMETERS:p_file  TYPE  localfile OBLIGATORY,p_rows  TYPE i DEFAULT 100 OBLIGATORY,p_mode TYPE c AS CHECKBOX.INITIALIZATION.  CALL METHOD c_oi_container_control_creator=>get_container_control     IMPORTING       control = iref_control       error   = iref_error.  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'E'.  ENDIF.  CREATE OBJECT oref_container    EXPORTING*      parent                      =       container_name              = 'CONTsadasda'*      style                       =*      lifetime                    = lifetime_default*      repid                       =*      dynnr                       =*      no_autodef_progid_dynnr     =    EXCEPTIONS       cntl_error                  = 1       cntl_system_error           = 2       create_error                = 3       lifetime_error              = 4       lifetime_dynpro_dynpro_link = 5       OTHERS                      = 6.  IF sy-subrc <> 0.    MESSAGE e001(00) WITH 'Error while creating container'.  ENDIF.  CALL METHOD iref_control->init_control    EXPORTING*      dynpro_nr                = SY-DYNNR*      gui_container            = ' '       inplace_enabled          = 'X'*      inplace_mode             = 0*      inplace_resize_documents = ' '*      inplace_scroll_documents = ' '*      inplace_show_toolbars    = 'X'*      no_flush                 = ' '*      parent_id                = cl_gui_cfw=>dynpro_0       r3_application_name      = 'EXCEL CONTAINER'*      register_on_close_event  = ' '*      register_on_custom_event = ' '*      rep_id                   = SY-REPID*      shell_style              = 1384185856       parent                   = oref_container*      name                     =*      autoalign                = 'x'    IMPORTING       error                    = iref_error*      retcode                  =    EXCEPTIONS       javabeannotsupported     = 1       OTHERS                   = 2          .  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'E'.  ENDIF.  CALL METHOD iref_control->get_document_proxy    EXPORTING*     document_format    = 'NATIVE'      document_type      = soi_doctype_excel_sheet*     no_flush           = ' '*     register_container = ' '     IMPORTING       document_proxy     = iref_document       error              = iref_error*    retcode            =      .  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'E'.  ENDIF.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.* To provide F4 help for the file  PERFORM sub_file_f4.START-OF-SELECTION.  CONCATENATE 'FILE://' p_file INTO v_document_url.  CALL METHOD iref_document->open_document    EXPORTING      document_title   = 'Excel'      document_url     = v_document_url*     no_flush         = ' '      open_inplace     = 'X'*     open_readonly    = ' '*     protect_document = ' '*     onsave_macro     = ' '*     startup_macro    = ''*     user_info        =    IMPORTING      error            = iref_error*     retcode          =      .  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'I'.    LEAVE LIST-PROCESSING.  ENDIF.  CALL METHOD iref_document->get_spreadsheet_interface     EXPORTING       no_flush        = ' '    IMPORTING      error           = iref_error      sheet_interface = iref_spreadsheet*     retcode         =      .  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'I'.    LEAVE LIST-PROCESSING.  ENDIF.  CALL METHOD iref_spreadsheet->get_sheets      EXPORTING       no_flush = ' '*      updating = -1     IMPORTING       sheets   = i_sheets       error    = iref_error*      retcode  =      .  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'I'.    LEAVE LIST-PROCESSING.  ENDIF.  LOOP AT i_sheets INTO wa_sheets.    CALL METHOD iref_spreadsheet->select_sheet       EXPORTING          name     = wa_sheets-sheet_name*         no_flush = ' '      IMPORTING          error    = iref_error*         retcode  =            .    IF iref_error->has_failed = 'X'.      EXIT.*      call method iref_error->raise_message*        exporting*          type = 'E'.    ENDIF.    CALL METHOD iref_spreadsheet->set_selection      EXPORTING        top     = 1        left    = 1        rows    = p_rows        columns = p_cols.    CALL METHOD iref_spreadsheet->insert_range      EXPORTING        name     = 'Test'        rows     = p_rows        columns  = p_cols        no_flush = ''      IMPORTING        error    = iref_error.    IF iref_error->has_failed = 'X'.      EXIT.*      call method iref_error->raise_message*        exporting*          type = 'E'.    ENDIF.    REFRESH i_data.    CALL METHOD iref_spreadsheet->get_ranges_data       EXPORTING*        no_flush  = ' '         all       = 'X'*        updating  = -1*        rangesdef =       IMPORTING         contents  = i_data         error     = iref_error*        retcode   =       CHANGING         ranges    = i_ranges             .    DELETE i_data WHERE value IS INITIAL OR value = space.    ULINE.    WRITE:/1 wa_sheets-sheet_name COLOR 3.    ULINE.*    LOOP AT i_data INTO wa_data.*      WRITE:(50) wa_data-value.*      AT END OF row.*        NEW-LINE.*      ENDAT.*    ENDLOOP.  ENDLOOP.  CALL METHOD iref_document->close_document*  EXPORTING*    do_save     = ' '*    no_flush    = ' '     IMPORTING       error       = iref_error*    has_changed =*    retcode     =      .  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'I'.    LEAVE LIST-PROCESSING.  ENDIF.  CALL METHOD iref_document->release_document*  EXPORTING*    no_flush = ' '     IMPORTING       error    = iref_error*    retcode  =      .  IF iref_error->has_failed = 'X'.    CALL METHOD iref_error->raise_message      EXPORTING        type = 'I'.    LEAVE LIST-PROCESSING.  ENDIF.  IF p_mode = 'X'.*    DATA: ls_data TYPE ZREPORT,*          lt_data TYPE STANDARD TABLE OF ZREPORT,*          chaR_index TYPE string,*          msg TYPE string.*    LOOP AT i_data INTO wa_data.**      IF sy-tabix MOD 2 = 1.*         char_index = sy-tabix.*         ls_data-report_name = wa_data-value.*         CONCATENATE 'Index' char_index ls_data-report_name INTO msg SEPARATED BY SPACE.*         CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'*           EXPORTING*             TEXT = msg.*      ELSE.*         ls_data-description = wa_data-value.*         APPEND ls_data TO lt_data.*         CLEAR: wa_data,ls_data.*      ENDIF.*    ENDLOOP.*    DELETE FROM zreport.*    INSERT zreport FROM TABLE lt_data.*    COMMIT WORK AND WAIT.*    IF sy-subrc = 0.*      i_total = lines( lt_data ).*      WRITE:/ 'User Assign Row Number:' , p_rows.*      WRITE:/ 'Actually Imported Row Numer:' , i_total.*    ENDIF.  ENDIF.*&---------------------------------------------------------------------**&      Form  SUB_FILE_F4*&---------------------------------------------------------------------**       F4 help for file path*----------------------------------------------------------------------*FORM sub_file_f4 .  DATA:  l_desktop       TYPE string,  l_i_files       TYPE filetable,  l_wa_files      TYPE file_table,  l_rcode         TYPE int4.* Finding desktop  CALL METHOD cl_gui_frontend_services=>get_desktop_directory    CHANGING      desktop_directory    = l_desktop    EXCEPTIONS      cntl_error           = 1      error_no_gui         = 2      not_supported_by_gui = 3      OTHERS               = 4.  IF sy-subrc <> 0.    MESSAGE e001(00) WITH        'Desktop not found'.  ENDIF.* Update View  CALL METHOD cl_gui_cfw=>update_view    EXCEPTIONS      cntl_system_error = 1      cntl_error        = 2      OTHERS            = 3.  CALL METHOD cl_gui_frontend_services=>file_open_dialog     EXPORTING       window_title            = 'Select Excel file'       default_extension       = '.xls'*      default_filename        =       file_filter             = '.xls'*      with_encoding           =       initial_directory       = l_desktop*      multiselection          =    CHANGING      file_table              = l_i_files      rc                      = l_rcode*     user_action             =*     file_encoding           =    EXCEPTIONS      file_open_dialog_failed = 1      cntl_error              = 2      error_no_gui            = 3      not_supported_by_gui    = 4      OTHERS                  = 5          .  IF sy-subrc <> 0.    MESSAGE e001(00) WITH 'Error while opening file'.  ENDIF.  READ TABLE l_i_files INDEX 1 INTO l_wa_files.  IF sy-subrc = 0.    p_file = l_wa_files-filename.  ELSE.    MESSAGE e001(00) WITH 'Error while opening file'.  ENDIF.ENDFORM.                    " SUB_FILE_F4