Generación de un archivo Excel con varias hojas

Anuncio
Teknoda “SAPping”
http://www.teknodatips.com.ar
Notas técnicas - Tips de SAP Netweaver ABAP – JAVA
Tip en detalle Nro. 24
(Lo nuevo, lo escondido, o simplemente lo de siempre pero bien explicado)
”Generación de un archivo Excel con varias hojas”
Tema:
Programación ABAP.
Descripción: El objetivo de este tip es describir la manera de generar un archivo Excel con
varias hojas, desde un programa ABAP.
Nivel:
Básico
Versión:
3.0 en adelante
Fecha pub:
Mayo de 2008
"Tips en breve/Tips en detalle" se envía con frecuencia variable y absolutamente sin cargo como un servicio a nuestros
clientes SAP. Contiene notas/recursos/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 los tips envíe un mensaje desde esa
dirección a sapping@teknoda.com, indicando su nombre, empresa a la que pertenece, cargo y país.
Tabla de contenido
I.
II.
III.
IV.
V.
Introducción
Consideraciones técnicas
Ejemplo práctico
Para tener en cuenta
Dónde obtener información
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
1
I. Introducción
Mediante la implementación del método GUI_DOWNLOAD de la clase CL_GUI_FRONTEND_SERVICES
(ver Tip Nro: 21 - “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.
II.
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
III.
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.
*&---------------------------------------------------------------------*
*& Report Z_EXCEL
*&
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
2
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
INCLUDE z_excel_top
INCLUDE z_excel_f01
.
.
" global Data
" FORM-Routines
************************************************************************
*
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
lineas
TYPE i,
TYPE i.
* CONSTANTS
CONSTANTS: row_max TYPE i VALUE 256.
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
3
************************************************************************
*
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.
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
4
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.
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
5
***** 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.
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
6
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
IV.
Para tener en cuenta…
Tablas relacionadas
TOLE
OLELOAD
SWOTOLE
TOLET
Aplicaciones OLE disponibles
Carga de información de tipo OLE
Tipos objeto workflow: Aplicaciones OLE
Tipos objeto Workflow: Textos aplic. OLE
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
7
Transacciones
OLE
SOLE
Ejemplos
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.
V.
Dónde obtener información adicional
http://help.sap.com Portal de Ayuda de SAP
www.sdn.sap.com SAP Developer Network
IMPORTANTE
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
8
Copyright Mayo Teknoda S.A. 2008. SAP, SAP Netwevaer, R/3 y ABAP son marcas registradas de SAP AG.
Teknoda agradece el permiso de SAP para usar sus marcas en esta publicación.
SAP no es el editor de esta publicación y no es, por lo tanto, responsable de su contenido.
La información contenida en este artículo ha sido recolectada en la tarea cotidiana por nuestros
especialistas a partir de fuentes consideradas confiables. No obstante, por la posibilidad de error humano,
mecánico, cambios de versión u otro, Teknoda no garantiza la exactitud o completud de la información aquí
volcada.
Dudas o consultas: sapping@teknoda.com
Teknoda - Notas Técnicas de SAP Netweaver/ ABAP
Dudas o consultas a sapping@teknoda.com
9
Descargar