> > > > > > > > >
GRUPO EBIM 08 Jul 24

¿Cómo crear Excel con objetos OLE2 desde SAP?

Compartir
  • Copiado en el portapapeles

Este artículo describe un ejemplo de conectividad y programación de Excel desde SAP/R3 mediante la tecnología OLE2.

Desde SAP, es posible iniciar Excel y ejecutar todos sus comandos, como la creación de objetos (filas, libros, rangos de celdas, etc.), sobre los cuales se pueden aplicar métodos como insertar, copiar, asignar propiedades a una celda (como formato numérico con separador de miles), asignar texto a una celda, entre otros.

En resumen, todo el lenguaje de programación de Excel está disponible desde ABAP.

Requerimientos funcionales

Se desea volcar a Excel un listado obtenido desde SAP. Se puede generar un fichero de texto que luego podrá ser abierto desde Excel (donde habrá que formatearlo cuidadosamente de forma manual) o se puede abrir Excel y mostrar la información en un archivo ya formateado directamente desde SAP.

Consideraciones técnicas

Para la comunicación vía OLE2 se dispone de las sentencias ABAP

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

Todos los programas que utilicen tecnología OLE2 deberán hacer referencia al include OLE2INCL, que contiene las definiciones de tipos necesarias para declarar los objetos.

Asimismo, en SAP existe la transacción SOLI que muestra las aplicaciones que soportan comunicación OLE2 con sus infotipos. Los infotipos son la relación de verbos (propiedades y métodos) de una aplicación; así en este ejemplo el infotipo comprende la relación de métodos y propiedades de Excel. Otra forma de consultar el infotipo es mediante la transacción SE16 sobre la tabla OLELOAD. De cualquiera de las dos formas se pueden consultar las acciones a ejecutar sobre aplicaciones externas mediante OLE, accesibles desde un programa ABAP.

Procedimientos a seguir

Para volcar la información de un listado SAP a formato Excel, se creará una tabla interna con todo el contenido del listado, teniendo en cuenta que se declararán en la tabla interna de trabajo los valores numéricos como campos de tipo numérico (puesto que en caso de que se declaren de tipo texto, una vez en Excel no se podrá efectuar cálculos con dichos campos).

Una vez informada la tabla interna se grabará en un fichero local con la función WS_DOWNLOAD, siendo el formato del fichero destino WK1 (formato para hoja de cálculo).

A continuación, se deberá arrancar Excel, abrir el fichero, crear un libro nuevo, copiar los datos del fichero al libro y cerrar el fichero. Después se puede formatear las columnas numéricas con punto en los miles, insertar la cabecera del listado con los textos correspondientes en la fila uno del libro y aplicar al libro una presentación en rejilla.

 

Para realizar todos estos pasos sólo hay que utilizar los verbos correspondientes en el infotipo de la aplicación Excel. Con el objeto de conocer la sintaxis exacta, la mejor solución es grabar todas las acciones a realizar en una macro de Excel, donde se podrá consultar a continuación la sintaxis de las diferentes instrucciones Excel que se han ejecutado, pudiendo entonces reproducir este código en ABAP.

 

A continuación, se muestra cómo se procedería para abrir un fichero

Se crea el objeto Hoja Excel

Create object hoja_excel ‘Excel.Sheet’

Donde hoja_excel es una variable de tipo ole2_object.

Para tener acceso a todos los verbos EXCEL desde el programa se debe crear el objeto aplicación excel como un método del objeto hoja_excel

CALL METHOD OF hoja_excel ‘Application’ = excel

La macro grabada en Excel al abrir el fichero contiene la siguiente instrucción

Workbooks.Open FileName:=»C:\Mis documentos\P2210.xls»,

Se identifica Workbooks como objeto y OpenFileName como el método que se ejecuta sobre el objeto Workbooks, con el nombre del archivo como un parámetro del método OpenFileName.

Se localiza en la la tabla OLELOAD el verbo WORKBOOKS, que es un método del objeto aplicación Excel creado (a esta conclusión se llega consultado la ayuda de Visual Basic para Excel). Por tanto se puede crear el objeto libros_trabajo aplicando el método WORKBOOKS sobre el objeto excel del modo siguiente:

CALL METHOD OF excel ‘WORKBOOKS’ = libros_trabajo

Finalmente ya se puede aplicar el método OpenFileName sobre el objeto libros_trabajo

CALL METHOD OF libros_trabajo = libro EXPORTING 1# = ‘C:\Mis documentos\P2210.xls’.

 

 

Ejemplo ABAP

REPORT zexcel.

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

* Include necesario para la declaracion de objetos OLE2

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

INCLUDE ole2incl.

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

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

* Declaraciones para la llamada a EXCEL.

DATA hoja_excel TYPE ole2_object.

DATA excel TYPE ole2_object.

DATA libro TYPE ole2_object.

DATA ole_sheets TYPE ole2_object.

DATA ole_sheet TYPE ole2_object.

DATA ole_libro TYPE ole2_object.

DATA libros_trabajo TYPE ole2_object.

DATA ole_datasheet TYPE ole2_object.

DATA ole_datacells TYPE ole2_object.

DATA l_lines TYPE i.

DATA l_lineas(10) TYPE c.

DATA rango TYPE ole2_object.

DATA row TYPE ole2_object.

DATA ventana TYPE ole2_object.

 

DATA end(10) TYPE c.

* Se crea el objeto Hoja Excel.

CREATE OBJECT hoja_excel ‘Excel.Sheet’.

* Se llama a la aplicación Excel.

CALL METHOD OF hoja_excel ‘Application’ = excel.

* Se hace visible la aplicación Excel

SET PROPERTY OF excel ‘Visible’ = 1.

CALL METHOD OF excel ‘Workbooks’ = libros_trabajo.

* Se abre el archivo con los datos del listado

CALL METHOD OF libros_trabajo ‘Open’ = libro EXPORTING

#1 = ‘C:\DOCS\PRUEBA.XLS’.

CALL METHOD OF libro ‘Worksheets’ = ole_sheets.

* Se crea un nuevo libro y se copian los datos del fichero al libro

CALL METHOD OF ole_sheets ‘Item’ = ole_datasheet EXPORTING #1 = 1.

CALL METHOD OF ole_datasheet ‘Copy’.

!

* Se cierra el fichero de trabajo con los datos.

call method of libro ‘Close’ exporting #1 = 0.

GET PROPERTY OF excel ‘ACTIVESHEET’ = ole_sheet.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘C1’ #2 = ‘H1’.

* Se formatea el ancho de columna

SET PROPERTY OF rango ‘COLUMNWIDTH’ = 21.

GET PROPERTY OF excel ‘ACTIVEWINDOW’ = ventana.

* Se muestra el libro con el formato en rejilla

SET PROPERTY OF ventana ‘DISPLAYGRIDLINES’ = -1.

FREE OBJECT rango.

* Se obtiene el total de líneas de la tabla para crear

* un rango con todas las celdas númericas y formatearlas

DESCRIBE TABLE i_detmedi LINES l_lines.

WRITE l_lines TO l_lineas.

TRANSLATE l_lineas USING ‘. ‘.

* Se aplica el formato numérico con decimales en los miles a

* las celdas que contienen importes.

CONCATENATE ‘H’ l_lineas INTO end.

CONDENSE end NO-GAPS.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘C1’ #2 = end.

SET PROPERTY OF rango ‘NUMBERFORMAT’ = ‘#,##0’.

FREE OBJECT rango.

*Se informa la cabecera del listado, insertando una fila en blanco al principio del mismo

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘A1’.

CALL METHOD OF rango ‘ENTIREROW’ = row.

CALL METHOD OF row ‘INSERT’.

FREE OBJECT rango.

FREE OBJECT row.

* Creando un rango con cada una de las celdas e informando el texto

* en las celdas se obtiene la cabecera

call method of ole_sheet ‘RANGE’ = rango exporting

#1 = ‘A1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-003.

FREE OBJECT rango.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘B1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-012.

FREE OBJECT rango.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘C1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-007.

FREE OBJECT rango.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘D1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-008.

FREE OBJECT rango.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘E1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-013.

FREE OBJECT rango.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘F1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-010.

FREE OBJECT rango.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘G1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-011.

FREE OBJECT rango.

CALL METHOD OF ole_sheet ‘RANGE’ = rango EXPORTING

#1 = ‘H1’.

SET PROPERTY OF rango ‘FORMULAR1C1’ = text-013.

FREE OBJECT rango.

* Se liberan todos los objetos creados

FREE OBJECT libro.

FREE OBJECT libros_trabajo.

FREE OBJECT ventana.

FREE OBJECT ole_sheet.

FREE OBJECT rango.

FREE OBJECT ole_sheets.

FREE OBJECT ole_datasheet.

FREE OBJECT hoja_excel.

FREE OBJECT excel.

En conclusión, la creación de Excel con objetos OLE2 desde SAP no solo facilita la integración y automatización de datos, sino que también optimiza los procesos empresariales al permitir una mayor flexibilidad y control sobre la presentación de la información.

Esta técnica ofrece una solución poderosa para mejorar la eficiencia operativa y la precisión en la gestión de datos, destacando la capacidad de SAP para adaptarse a las necesidades específicas de cada empresa. Implementar esta funcionalidad puede transformar la manera en que se manejan y reportan los datos, proporcionando un valor añadido significativo a las operaciones diarias.


En GRUPO EBIM desarrollamos soluciones TI a la medida de las necesidades de tu empresa. Somos expertos en consultoría SAP, Outsourcing de personal TI, y contamos con un equipo de profesionales dispuestos a brindar soluciones digitales escalables para tu negocio. ¡Llena nuestro formulario de contacto y obtén más información sobre los servicios que ofrecemos!

ES
Abrir chat
Hola 👋
¿En qué podemos ayudarte?