Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos
6,144
Reading multiple tabs of excel into an internal table.
Steps given below in the document describes reading multiple tabs of an excel file into an internal table using OLE commands.
DATA:lt_excel_tab    TYPE  STANDARD TABLE OF char2000,"Data in Excel
          ls_excel_tab         TYPE char2000,       "Data in Excel
          ls_work                 TYPE ole2_object,    "object for worksheet
          ls_start_cell          TYPE ole2_object,    "Object for starting cell
          ls_excel                TYPE ole2_object,    "Object for application
          ls_workbook         TYPE ole2_object,    "Object for workbook
          ls_end_cell           TYPE ole2_object,    "object for end of cell        
          ls_end                  TYPE ole2_object,   "Ending cell
          ls_range               TYPE ole2_object,    "Object for Range
          l_text                    TYPE string,             "Extra fields in the line
          ln_off                    TYPE i.                    "Worksheet number
Create Object reference for Excel Application.   
CREATE OBJECT ls_excel 'Excel.Application'.

Get Property of the workbooks by calling WORKBOOKS method of excel application.

    CALL METHOD OF   ls_excel  'WORKBOOKS' =ls_workbook.

Call method OPEN of workbook to open workbook exporting file path.

    CALL METHOD OF   ls_workbook    'Open'
      EXPORTING
        #1          = p_file.
    IF sy-subrc NE 0.
*     Error in opening file
    ENDIF.


Repeat below steps <Number of tabs> times as the excel sheet is going to have max <Number of tabs>
tabs
.
    DO <Number of tabs> TIMES.

Pass index number of excel sheet tab. If index number is 1 then first tab will be opened to read.

      CALL METHOD OF ls_excel  'Worksheets' = ls_work
        EXPORTING
          #1           = sy-index.

If the sheet is available then activate the sheet.
      CALL METHOD OF  ls_work  'Activate'.

If you want to set starting row and column for reading data then call below method of excel application. Here starting cell is set as 2nd row and 1st column.
      CALL METHOD OF ls_excel 'Cells'  = ls_start_cell
        EXPORTING
          #1       = 2
          #2       = 1.

Getting the last cell that is filled with data

      GET PROPERTY OF ls_excel 'ActiveCell' = ls_end_cell.
      CALL METHOD OF
          ls_end_cell
          'SpecialCells' = ls_end
        EXPORTING
          #1             = 11.
Now Create range with starting cell and ending cell

      CALL METHOD OF  ls_excel   'Range'  = ls_range
        EXPORTING
          #1       = ls_start_cell
          #2       = ls_end.

*     Selecting the Range
      CALL METHOD OF ls_range  'Select'.

*     Copying the range
      CALL METHOD OF ls_range  'Copy'.

      REFRESH: lt_excel_tab[].
Now call method cl_gui_frontend_services=>clipboard_import to read clipboard into internal table.

      CALL METHOD cl_gui_frontend_services=>clipboard_import
        IMPORTING
          data                 = lt_excel_tab
        EXCEPTIONS
          cntl_error           = 1
          error_no_gui         = 2
          not_supported_by_gui = 3
          OTHERS               = 4.
      IF sy-subrc = 0.
        "Process internal table data.
      ENDIF.

      REFRESH lt_excel_tab.

    ENDDO.

Skip message window displayed before closing the application
    SET PROPERTY OF ls_excel 'DisplayAlerts'  = 0.

Call method QUIT to Close the file.

    CALL METHOD OF ls_excel  'Quit'.