*&--------------------------------------------------------------------
-*
*& Report Y01_EXCEL_OLE04
*&
*&--------------------------------------------------------------------
-*
*&
*&
*&--------------------------------------------------------------------
-*
REPORT Y01_EXCEL_OLE04.
Tables: mara, sflight,t134.
TYPE-POOLS: ole2incl.
*&--------------------------------------------------------------------
-*
* CONSTANTES
*&--------------------------------------------------------------------
-*
CONSTANTS: row_max TYPE i VALUE 256.
*&--------------------------------------------------------------------
-*
* ESTRUCTURAS
*&--------------------------------------------------------------------
-*
TYPES: BEGIN OF TY_DATA,
matnr like mara-matnr,
ersda like mara-ersda,
mtart like mara-mtart,
meins like mara-meins,
laeda like mara-laeda,
END OF TY_DATA.
TYPES: ty_sflight TYPE SFLIGHT,
ty_mara TYPE MARA,
ty_t134 TYPE t134.
*&--------------------------------------------------------------------
-*
* DATA
*&--------------------------------------------------------------------
-*
DATA: lo_application TYPE ole2_object,
lo_workbook TYPE ole2_object,
lo_workbooks TYPE ole2_object,
lo_range TYPE ole2_object,
lo_worksheet TYPE ole2_object,
lo_worksheets TYPE ole2_object,
lo_column TYPE ole2_object,
lo_row TYPE ole2_object,
lo_cell TYPE ole2_object,
lo_font TYPE ole2_object,
lo_borders TYPE ole2_object,
lo_background TYPE ole2_object,
lo_we TYPE ole2_object.
DATA: lo_cellstart TYPE ole2_object,
lo_cellend TYPE ole2_object,
lo_selection TYPE ole2_object,
lo_validation TYPE ole2_object.
DATA: lv_selected_folder TYPE string,
lv_complete_path TYPE char256,
lv_titulo TYPE string,
it_mara TYPE STANDARD TABLE OF TY_DATA,
it_sflight TYPE STANDARD TABLE OF TY_SFLIGHT,
it_t134 TYPE STANDARD TABLE OF TY_T134.
DATA: lv_index TYPE i,
lv_lines TYPE i,
lv_columna TYPE i,
lv_fila TYPE i,
lv_contador TYPE i.
*&--------------------------------------------------------------------
-*
* FIELD SYMBOLS
*&--------------------------------------------------------------------
-*
FIELD-SYMBOLS: <FS_DATA> LIKE LINE OF IT_MARA,
<FS_SPFLIGHT> LIKE LINE OF IT_SFLIGHT,
<FS_T134> LIKE LINE OF IT_T134.
START-OF-SELECTION.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = lv_titulo
initial_folder = 'D:\'
CHANGING
selected_folder = lv_selected_folder
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
OTHERS = 3.
CHECK NOT lv_selected_folder IS INITIAL.
SELECT * INTO TABLE IT_SFLIGHT FROM sflight
WHERE connid EQ '17'.
IF SY-SUBRC <> 0.
message e888(sabapdocu) WITH 'error 1'.
ENDIF.
SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_MARA FROM mara
WHERE ernam EQ 'WMOLERO'.
IF SY-SUBRC <> 0.
Message e888(sabapdocu) WITH 'error2'.
ENDIF.
SELECT * INTO TABLE IT_T134 FROM T134
WHERE MBREF EQ'ROH'.
IF SY-SUBRC <> 0.
Message e888(sabapdocu) WITH 'error3'.
ENDIF.
*CREANDO EL OBJETO EXCEL
CREATE OBJECT lo_application 'EXCEL.APPLICATION'.
*SE HACE VISIBLE LA APLICACION
SET PROPERTY OF lo_application 'VISIBLE' = 1.
*LLAMA AL METODO WORKSBOOKBS PARA CREAR EL LIBRO
*CALL METHOD OF lo_application 'WORKBOOKS' = lo_workbook.
CALL METHOD OF lo_application 'WORKBOOKS' = lo_workbooks.
CALL METHOD OF lo_workbooks 'ADD' = lo_workbook.
**AGREGA UNA HOJA
*CALL METHOD OF lo_application 'WORKSHEETS' = lo_worksheet.
*CALL METHOD OF lo_worksheet 'ADD'.
******************************************************************
GET PROPERTY OF lo_application 'ACTIVESHEET' = lo_worksheet.
SET PROPERTY OF lo_worksheet 'NAME' = 'MARA'.
*} AGREGAR HOJA
******************************************************************
CLEAR lv_lines.
DESCRIBE TABLE it_mara LINES lv_lines.
IF LV_LINES <> 0.
*CREA LA PRIMERA HOJA
CALL METHOD OF lo_application 'WORKSHEETS' = lo_worksheet
EXPORTING #1 = 1.
* SETEA NOMBRE DE LA HOJA
SET PROPERTY OF lo_worksheet 'NAME' = 'MARA'.
CALL METHOD OF lo_worksheet 'ACTIVATE'.
* RECORRER LA TABLA INTERNA
LOOP AT it_mara ASSIGNING <FS_DATA>.
lv_contador = SY-TABIX + 1.
* POR CADA CAMPO DE LA TABLA INTERNA MUESTRA 4
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = lv_contador
#2 = 1.
SET PROPERTY OF lo_cell 'VALUE' = <FS_DATA>-MATNR.
* FORMATO DE CELDA
CALL METHOD OF lo_cell 'FONT' = lo_font.
SET PROPERTY OF lo_font 'BOLD' = 2.
SET PROPERTY OF lo_font 'SIZE' = '12'.
FREE OBJECT lo_font.
* FORMATO COLOR DE CELDA
CALL METHOD OF lo_cell 'INTERIOR' = lo_background.
SET PROPERTY OF lo_background 'COLORINDEX' = '34'.
SET PROPERTY OF lo_background 'PATTERN' = 1.
FREE OBJECT lo_background.
* BORDES
* BORDE IZQUIERDO
CALL METHOD OF lo_cell 'BORDERS' = lo_borders
EXPORTING #1 = '1'.
SET PROPERTY OF lo_borders 'LINESTYLE' = 1.
SET PROPERTY OF lo_borders 'WEIGHT' = lo_we.
FREE OBJECT lo_borders.
* BORDE DERECHO
CALL METHOD OF lo_cell 'BORDERS' = lo_borders
EXPORTING #1 = '2'.
SET PROPERTY OF lo_borders 'LINESTYLE' = 2.
SET PROPERTY OF lo_borders 'WEIGHT' = lo_we.
FREE OBJECT lo_borders.
* BORDE ARRIBA
CALL METHOD OF lo_cell 'BORDERS' = lo_borders
EXPORTING #1 = '3'.
SET PROPERTY OF lo_borders 'LINESTYLE' = 3.
SET PROPERTY OF lo_borders 'WEIGHT' = lo_we.
FREE OBJECT lo_borders.
* BORDE ABAJO
CALL METHOD OF lo_cell 'BORDERS' = lo_borders
EXPORTING #1 = '4'.
SET PROPERTY OF lo_borders 'LINESTYLE' = 4.
SET PROPERTY OF lo_borders 'WEIGHT' = lo_we.
FREE OBJECT lo_borders.
**********************************************************************
**********
ADD 1 TO lv_index.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = lv_contador
#2 = 2.
SET PROPERTY OF lo_cell 'VALUE' = <fs_data>-MTART.
* FORMATO DE CELDA
CALL METHOD OF lo_cell 'FONT' = lo_font.
SET PROPERTY OF lo_font 'BOLD' = 1.
SET PROPERTY OF lo_font 'SIZE' = '10'.
FREE OBJECT lo_font.
* COLOR DE FONDO
CALL METHOD OF lo_cell 'INTERIOR' = lo_background.
SET PROPERTY OF lo_background 'COLORINDEX' = '35'.
SET PROPERTY OF lo_background 'PATTERN' = 1.
FREE OBJECT lo_background.
ADD 1 TO lv_index.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = lv_contador
#2 = 3.
SET PROPERTY OF lo_cell 'VALUE' = <fs_data>-LAEDA.
* FORMATO DE CELDA
SET PROPERTY OF lo_cell 'FONT' = lo_font.
SET PROPERTY OF lo_font 'BOLD' = 1.
SET PROPERTY OF lo_font 'SIZE' = '8'.
FREE OBJECT lo_font.
* COLOR DE FONDO
CALL METHOD OF lo_cell 'INTERIOR' = lo_background.
SET PROPERTY OF lo_background 'COLORINDEX' = '36'.
SET PROPERTY OF lo_background 'PATTERN' = 1.
FREE OBJECT lo_background.
ADD 1 TO lv_index.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = lv_contador
#2 = 4.
SET PROPERTY OF lo_cell 'VALUE' = <fs_data>-MEINS.
* FORMATO DE CELDA
CALL METHOD OF lo_cell 'FONT' = lo_font.
SET PROPERTY OF lo_font 'BOLD' = 1.
SET PROPERTY OF lo_font 'SIZE' = '8'.
FREE OBJECT lo_font.
* COLOR DE FONDO
CALL METHOD OF lo_cell 'INTERIOR' = lo_background.
SET PROPERTY OF lo_background 'COLORINDEX' = '36'.
SET PROPERTY OF lo_background 'PATTERN' = 1.
FREE OBJECT lo_background.
ENDLOOP.
ENDIF.
CLEAR lv_lines.
CLEAR lv_contador.
*CLEAR SY-TABIX.
DESCRIBE TABLE IT_SFLIGHT LINES lv_lines.
IF lv_lines <> 0.
* CREA LA SEGUNDA HOJA
CALL METHOD OF lo_application 'WORKSHEETS' = lo_worksheet
EXPORTING #1 = 2.
SET PROPERTY OF lo_worksheet 'NAME' = 'SPFLIGHT'.
CALL METHOD OF lo_worksheet 'ACTIVATE'.
LOOP AT IT_SFLIGHT ASSIGNING <fs_spflight>.
* LV_INDEX = ROW_MAX * ( SY-TABIX - 1 ) + 1.
LV_CONTADOR = SY-TABIX + 1.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = LV_CONTADOR
#2 = 1.
SET PROPERTY OF lo_cell 'VALUE' = <fs_spflight>-CONNID.
ADD 1 TO LV_INDEX.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = LV_CONTADOR
#2 = 2.
SET PROPERTY OF lo_cell 'VALUE' = <fs_spflight>-CARRID.
ADD 1 TO LV_INDEX.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = LV_CONTADOR
#2 = 3.
SET PROPERTY OF lo_cell 'VALUE' = <fs_spflight>-FLDATE.
ADD 1 TO LV_INDEX.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = LV_CONTADOR
#2 = 4.
SET PROPERTY OF lo_cell 'VALUE' = <fs_spflight>-PAYMENTSUM.
* FREE OBJECT lo_cell.
ENDLOOP.
ENDIF.
* CREA LA TERCERA HOJA
CLEAR LV_LINES.
CLEAR LV_CONTADOR.
DESCRIBE TABLE IT_T134 LINES LV_LINES.
IF LV_LINES <> 0.
CALL METHOD OF lo_application 'WORKSHEETS' = lo_worksheet
EXPORTING #1 = 3.
SET PROPERTY OF lo_worksheet 'NAME' = 'T134'.
CALL METHOD OF lo_worksheet 'ACTIVATE'.
LOOP AT IT_T134 ASSIGNING <FS_T134>.
LV_CONTADOR = SY-TABIX + 1.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = LV_CONTADOR
#2 = 1.
SET PROPERTY OF lo_cell 'VALUE' = <FS_T134>-ARDEL.
ADD 1 TO LV_INDEX.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = LV_CONTADOR
#2 = 2.
SET PROPERTY OF lo_cell 'VALUE' = <FS_T134>-ARANZ.
ADD 1 TO LV_INDEX.
CALL METHOD OF lo_worksheet 'CELLS' = lo_cell
EXPORTING #1 = LV_CONTADOR
#2 = 3.
SET PROPERTY OF lo_cell 'VALUE' = <FS_T134>-CLASS.
ENDLOOP.
ENDIF.
*GUARDAR EXCEL
CALL METHOD OF lo_worksheet 'SAVEAS'
EXPORTING
#1 = lv_complete_path
#2 = 1.
*CIERRA LA VENTANA.
SET PROPERTY OF lo_application 'VISIBLE' = 0.
*LIBERA EL OBJETO
CALL METHOD OF lo_application 'QUIT'.
FREE OBJECT lo_application.
*
*GET PROPERTY OF lo_application 'ACTIVESHEET' = lo_worksheet.
*
*CONCATENATE lv_selected_folder 'TEST' INTO lv_complete_path.
*
*CALL METHOD OF lo_workbook 'SAVEAS'
*EXPORTING
*#1 = lv_complete_path.
*IF sy-subrc EQ 0.
*MESSAGE 'File downloaded successfully' TYPE 'S'.
*ELSE.
*MESSAGE 'Error downloading the file' TYPE 'E'.
*ENDIF.
*
*CALL METHOD OF lo_application 'QUIT'.
*FREE OBJECT lo_worksheet.
*FREE OBJECT lo_workbook.
*FREE OBJECT lo_application.