SAP Netweaver / ABAP                  Notas técnicas / Tips / Tutorials

Generación de un archivo Excel con varias hojas

Aprenda a generar un archivo Excel con varias hojas, desde un programa ABAP.

Mediante la implementación del método GUI_DOWNLOAD de la clase CL_GUI_FRONTEND_SERVICES (Ver Tip  -  Nueva técnica para el manejo de archivos en el Presentation Server” ) es posible generar, entre otros, un archivo en formato Excel. En ese caso, se utiliza  una única tabla interna con los datos a mostrar  en una única hoja del libro Excel.


El presente tip  describe cómo generar un archivo Excel  con varias hojas, desde un programa ABAP, mediante la tecnología OLE2.

Desde la programación  ABAP, se puede utilizar  la funcionalidad provista por Microsoft Excel para crear filas,  libros, hojas, rangos de celdas, gráficos, etc., y poder modificar sus propiedades llamando a sus métodos: insertar, copiar, dar formato a las celdas, etc.

Consideraciones técnicas

El lenguaje ABAP, así como otros softwares de aplicación, soportan la técnica de automatización de objetos OLE2. Cuando se llama a un programa ABAP, el SAPGUI actúa como cliente OLE y, en este caso, el programa Excel como servidor OLE.

Típicamente las aplicaciones que ofrecen automatización de objetos son productos Microsoft Office tal como  Excel y Word,  y cuentan con clases públicas y métodos que pueden verse desde el menú:

Tools → Macro → Visual Basic Editor → Object Browser.

Las aplicaciones controladas por ABAP deben estar contenidas en la tabla transparente TOLE, la cual es mantenida desde la transacción SOLE. Esta tabla contiene el nombre de las clases y componentes soportados  por el ambiente de ejecución ABAP .

Las sentencias ABAP  de automatización son:

  • CREATE OBJECT
  • SET PROPERTY
  • GET PROPERTY
  • CALL METHOD
  • FREE OBJECT

Importante:

NO confundir  CREATE OBJECT y  CALL METHOD  con sentencias de ABAP  Object.

Todos los programas que utilicen tecnología OLE2 deberán hacer referencia al include OLE2INCL

 

Ejemplo práctico

En el siguiente ejemplo, se genera un archivo en formato Excel con tres hojas. Se cargan tres tablas internas, una para cada hoja y se crean los objetos necesarios con las llamadas a sus métodos.

************************************************************************

* START-OF-SELECTION

************************************************************************

START-OF-SELECTION.

************************************************************************

* Recolección de datos en tres tablas internas *

************************************************************************

PERFORM f_querys USING p_conn

CHANGING it_sflig

it_spfli

it_sbook.

************************************************************************

* END-OF-SELECTION

************************************************************************

END-OF-SELECTION.

************************************************************************

* Generación del Libro Excel con tres hojas *

************************************************************************

PERFORM f_hojas_excel USING p_file

it_sflig

it_spfli

it_sbook.

*&---------------------------------------------------------------------*

*& Include Z_EXCEL_TOP                         Report Z_EXCEL

*&

*&---------------------------------------------------------------------*

REPORT Z_EXCEL LINE-SIZE 150.

************************************************************************

* TYPE-POOLS

************************************************************************

* INCLUDE NECESARIO

INCLUDE ole2incl.

************************************************************************

* TYPES

************************************************************************

TYPES: ty_sflig TYPE sflight,

ty_spfli TYPE spfli,

ty_sbook TYPE sbook,

ty_t_sflig TYPE STANDARD TABLE OF ty_sflig,

ty_t_spfli TYPE STANDARD TABLE OF ty_spfli,

ty_t_sbook TYPE STANDARD TABLE OF ty_sbook.

 

************************************************************************
* DATA
************************************************************************

* TABLAS INTERNAS PARA CADA HOJA

DATA: it_sflig TYPE ty_t_sflig,

it_spfli TYPE ty_t_spfli,

it_sbook TYPE ty_t_sbook.

 

* VARIABLES PARA CREAR EL ARCHIVO EXCEL

DATA: application TYPE ole2_object,

workbook TYPE ole2_object,

sheet          TYPE ole2_object,

cells             TYPE ole2_object,

int                 TYPE ole2_object,

font               TYPE ole2_object,

we               TYPE ole2_object,

borders       TYPE ole2_object.

 

DATA: index TYPE i,

lineas TYPE i.

 

* CONSTANTS

CONSTANTS: row_max TYPE i VALUE 256.

 

************************************************************************

* SELECTION-SCREEN

************************************************************************

PARAMETERS: p_conn TYPE s_conn_id DEFAULT '0017' OBLIGATORY,

p_file     TYPE rlgrap-filename

DEFAULT 'C: /TABLAS.XLS' OBLIGATORY.

 

*&---------------------------------------------------------------------*

*& Include                           Z_EXCEL_F01

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*& Form f_querys

*&---------------------------------------------------------------------*

FORM f_querys USING p_conn TYPE s_conn_id

CHANGING pt_sflig TYPE ty_t_sflig

pt_spfli TYPE ty_t_spfli

pt_sbook TYPE ty_t_sbook.

SELECT *

INTO TABLE pt_sflig

FROM sflight

WHERE connid EQ p_conn

.

IF sy-subrc <> 0.

MESSAGE e888(sabapdocu) WITH 'error 1'.

ENDIF.

 

SELECT *

INTO TABLE pt_spfli

FROM spfli

WHERE connid EQ p_conn

.

IF sy-subrc <> 0.

MESSAGE e888(sabapdocu) WITH 'error 2'.

ENDIF.

 

SELECT *

INTO TABLE pt_sbook

FROM sbook UP TO 50 ROWS

WHERE connid EQ p_conn

.

IF sy-subrc <> 0.

MESSAGE e888(sabapdocu) WITH 'error 3'.

ENDIF.

 

ENDFORM. " f_querys

*&---------------------------------------------------------------------*

*&             Form f_hojas_excel

*&---------------------------------------------------------------------*

FORM f_hojas_excel USING pv_file TYPE rlgrap-filename

pt_sflig TYPE ty_t_sflig

pt_spfli TYPE ty_t_spfli

pt_sbook TYPE ty_t_sbook.

 

DATA: pw_sflig TYPE ty_sflig,

pw_spfli TYPE ty_spfli,

pw_sbook TYPE ty_sbook.

 

* CREA EL OBJETO EXCEL

CREATE OBJECT application 'excel.application'.

 

* HACE VISIBLE LA APLICACION

SET PROPERTY OF application 'visible' = 1.

 

* LLAMA AL METODO WORKSBOOKS PARA CREAR EL LIBRO

CALL METHOD OF application 'Workbooks' = workbook.

CALL METHOD OF workbook 'Add'.

 

* AGREGA UNA HOJA

CALL METHOD OF application 'Worksheets' = sheet.

CALL METHOD OF sheet 'Add'.

CLEAR lineas.

DESCRIBE TABLE pt_sflig LINES lineas.

 

IF lineas <> 0.

* CREA LA PRIMER HOJA

CALL METHOD OF application 'Worksheets' = sheet

EXPORTING

#1 = 1.

 

* SETEA NOMBRE DE LA HOJA

SET PROPERTY OF sheet 'Name' = 'Sflight'.

CALL METHOD OF sheet 'Activate'.

 

* RECORRE LA TABLA INTERNA

LOOP AT pt_sflig INTO pw_sflig.

 

* POR CADA CAMPO DE LA TABLA INTERNA MUESTRA 4

index = row_max * ( sy-tabix - 1 ) + 1.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sflig-connid.

***** FORMATO DE CELDA

CALL METHOD OF cells 'FONT' = font.

SET PROPERTY OF font 'BOLD' = 2.

SET PROPERTY OF font 'SIZE' = '12'.

FREE OBJECT font.

***** COLOR DE FONDO

CALL METHOD OF cells 'INTERIOR' = int.

SET PROPERTY OF int 'ColorIndex' = '34'.

SET PROPERTY OF int 'Pattern' = 1.

FREE OBJECT int.

***** BORDES

* izquierdo

CALL METHOD OF cellS 'BORDERS' = borders

EXPORTING

#1 = '1'.

SET PROPERTY OF borders 'LineStyle' = '1'.

SET PROPERTY OF borders 'WEIGHT' = we.

FREE OBJECT borders.

* derecho

CALL METHOD OF cellS 'BORDERS' = borders

EXPORTING

#1 = '2'.

SET PROPERTY OF borders 'LineStyle' = '2'.

SET PROPERTY OF borders 'WEIGHT' = we.

FREE OBJECT borders.

* arriba

CALL METHOD OF cellS 'BORDERS' = borders

EXPORTING

#1 = '3'.

SET PROPERTY OF borders 'LineStyle' = '3'.

SET PROPERTY OF borders 'WEIGHT' = we.

FREE OBJECT borders.

* abajo

CALL METHOD OF cellS 'BORDERS' = borders

EXPORTING

#1 = '4'.

SET PROPERTY OF borders 'LineStyle' = '4'.

SET PROPERTY OF borders 'WEIGHT' = we.

FREE OBJECT borders.

 

****************************************************************

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sflig-fldate.

***** FORMATO DE CELDA

CALL METHOD OF cells 'FONT' = font.

SET PROPERTY OF font 'BOLD' = 1.

SET PROPERTY OF font 'SIZE' = '10'.

FREE OBJECT font.

***** COLOR DE FONDO

CALL METHOD OF cells 'INTERIOR' = int.

SET PROPERTY OF int 'ColorIndex' = '35'.

SET PROPERTY OF int 'Pattern' = 1.

FREE OBJECT int.

 

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sflig-price.

***** FORMATO DE CELDA

CALL METHOD OF cells 'FONT' = font.

SET PROPERTY OF font 'BOLD' = 1.

SET PROPERTY OF font 'SIZE' = '8'.

FREE OBJECT font.

***** COLOR DE FONDO

CALL METHOD OF cells 'INTERIOR' = int.

SET PROPERTY OF int 'ColorIndex' = '36'.

SET PROPERTY OF int 'Pattern' = 1.

FREE OBJECT int.

 

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sflig-currency.

***** FORMATO DE CELDA

CALL METHOD OF cells 'FONT' = font.

SET PROPERTY OF font 'BOLD' = 2.

SET PROPERTY OF font 'SIZE' = '10'.

FREE OBJECT font.

***** COLOR DE FONDO

CALL METHOD OF cells 'INTERIOR' = int.

SET PROPERTY OF int 'ColorIndex' = '37'.

SET PROPERTY OF int 'Pattern' = 1.

FREE OBJECT int.

 

ENDLOOP.

ENDIF.

CLEAR lineas.

DESCRIBE TABLE pt_spfli LINES lineas.

IF lineas <> 0.

* CREA LA SEGUNDA HOJA, SPFLI

CALL METHOD OF application 'Worksheets' = sheet

EXPORTING

#1 = 2.

SET PROPERTY OF sheet 'Name' = 'Spfli'.

CALL METHOD OF sheet 'Activate'.

LOOP AT pt_spfli INTO pw_spfli.

index = row_max * ( sy-tabix - 1 ) + 1.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_spfli-connid.

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_spfli-countryfr.

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_spfli-cityfrom.

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_spfli-airpfrom.

 

ENDLOOP.

ENDIF.

 

* CREA LA TERCER HOJA, SBOOK

CLEAR lineas.

DESCRIBE TABLE pt_sbook LINES lineas.

IF lineas <> 0.

CALL METHOD OF application 'Worksheets' = sheet

EXPORTING

#1 = 3.

SET PROPERTY OF sheet 'Name' = 'Sbook'.

CALL METHOD OF sheet 'Activate'.

 

LOOP AT pt_sbook INTO pw_sbook.

 

index = row_max * ( sy-tabix - 1 ) + 1.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sbook-connid.

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sbook-fldate.

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sbook-bookid.

ADD 1 TO index.

CALL METHOD OF sheet 'Cells' = cells

EXPORTING

#1 = index.

SET PROPERTY OF cells 'Value' = pw_sbook-customid.

 

ENDLOOP.

 

ENDIF.

 

* GUARDA EN EL EXCEL

CALL METHOD OF sheet 'SaveAs'

EXPORTING

#1 = pv_file "PATH A DONDE VA A SER GUARDADO

#2 = 1.

 

* CIERRA LA VENTANA

SET PROPERTY OF application 'visible' = 0.

 

* LIBERA EL OBJETO

FREE OBJECT application.

 

ENDFORM. " f_hojas_excel

* FIN


Para tener en cuenta…

 

  • Tablas relacionadas

TOLE                      Aplicaciones OLE disponibles

OLELOAD               Carga de información de tipo OLE

SWOTOLE              Tipos objeto workflow: Aplicaciones OLE

TOLET                     Tipos objeto Workflow: Textos aplic. OLE

 

  • Transacciones

OLE                        Ejemplos

SOLE                     Mantenimiento de las aplicaciones

 

En la transacción SOLE se muestran las aplicaciones que soportan comunicación OLE2 con sus infotipos. Los infotipos guardan la relación de propiedades y métodos en una aplicación. Todos los infotipos soportados se pueden ver en la tabla OLELOAD.

 

  • Con el objeto de conocer la sintaxis exacta, los atributos y métodos a utilizar, la mejor solución es grabar todas las acciones en una macro de Excel, donde se podrá consultar la sintaxis de las diferentes instrucciones que se han ejecutado y luego, trasladar esas acciones al código ABAP.

Otra opción es, desde el Excel acceder a Microsoft Visual Basic, a través de la ayuda con Alt + F11. En la ventana de la derecha Members of ‘Application’, se verán los métodos de la clase Excel.application.

 

ABAP-generacion-Excel

 


Copyright Teknoda S.A.

IMPORTANTE:
“Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos.
Si desea suscribir otra dirección de e-mail para que comience a recibir las Notas Técnicas SAP, envíe un mensaje desde esa direcciónsapping@teknoda.com, aclarando nombre, empresa, cargo y país del suscriptor.

SAP, Netweaver, R/3, Fiori,S4/HANA y ABAP son marcas registradas de SAP AG. SAP no es el editor de esta publicación y no es responsable de la misma en ningún aspecto. La información contenida en esta publicación ha sido generada por nuestros especialistas a partir de fuentes consideradas confiables y del ejercicio profesional cotidiano. No obstante, por la posibilidad de error humano, mecánico, cambio de versión u otro, Teknoda no garantiza la exactitud o completud de la misma.
COPYRIGHT TEKNODA S.A. PROHIBIDA SU REPRODUCCION TOTAL O PARCIAL SIN CONSENTIMIENTO DE TEKNODA

 

 


Ficha técnica: Tema: Programación ABAP, archivos

Descripción: Aprenda a generar un archivo Excel con varias hojas, desde un programa ABAP.

Copyright © 2024 Teknoda Tech Portal & Training. Todos los derechos reservados.
Joomla! es software libre, liberado bajo la GNU General Public License.