COMO CREAR UN LIBRO EXCEL DESDE SAP


Lo primero antes de todo es incluir el include correcto.
Código:

	
INCLUDE ole2incl.

Después crearte una serie de datos/objetos dependiendo de lo que necesites hacer:
Código:

	
*Para crear excel
 DATA: excel TYPE ole2_object.
 DATA: book  TYPE ole2_object.
 DATA: hoja  TYPE ole2_object.   "hoja
 DATA: rango TYPE ole2_object.
 DATA: celda TYPE ole2_object.
 DATA: item  TYPE ole2_object.

Creamos el excel:
Código:

	
* creamos el excel
 CREATE OBJECT excel 'excel.application'.
 CALL METHOD OF excel 'Workbooks' = book.
* Abrimos la plantilla
 CALL METHOD OF book 'Open'
   EXPORTING
     #1 = fichero.
* set property of excel 'visible' = 1.

donde fichero es la ruta a un archivo xls existente.
la linea que esta comentada "set property..." indica si queremos
ver el proceso de modificacion del excel, o lo hagamos de forma oculta.
Y una vez hecho esto vamos modificando, añadiendo cosas al excel con
los datos que queremos.
Para modificar el contenido de una celda:

Código:

*&---------------------------------------------------------------------*
*&      Form  rellenar_celda
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->COLUMNA    text
*      -->FILA       text
*      -->TEXTO      text
*----------------------------------------------------------------------*
 FORM rellenar_celda USING columna fila texto.
*rellenamos la celda
   CALL METHOD OF excel 'cells' = celda
     EXPORTING
       #1 = fila
       #2 = columna.
   SET PROPERTY OF celda 'value' = texto.
   FREE OBJECT celda.
 ENDFORM.                    "rellenar_celda


Donde fila y columna es el tipico "C" "7", (el juego de hundir la flota vamos).
La celda que te modifica es la celda 'columna-fila' de la hoja activa.
Para seleccionar una hoja:

Código:
	
* Cogemos el libro
 CALL METHOD OF books 'item' = book
   EXPORTING
     #1 = 1.
* Cogemos las hojas
 CALL METHOD OF book 'sheets' = sheets.
* Cogemos la hoja que queremos
 CALL METHOD OF sheets 'item' = sheet
   EXPORTING
     #1 = n.
* n es el numero de hoja (de izquierda a derecha segun las pestañas
* en el propio excel) empezando por 1.


Para crear una nueva hoja.
Te pongo un ejemplo mio y funcionando, lo que hago es,
en la primera hoja tengo una plantilla, y copio esa hoja al final.
boton derecho sobre la pestaña de la hoja-mover o copiar->(mover al final, y crear una copia) aceptar
Código:
	
* Seleccionamos la primera hoja (plantilla) y la movemos al final.
 exporting #1 = countp.

 CALL METHOD OF plantilla 'Select'.
*se crea una instancia de hoja en la ultima posicion
 CALL METHOD OF excel 'Sheets' = hoja
   EXPORTING
     #2 = countp.

*se copia la plantilla en la hoja
 CALL METHOD OF plantilla 'Copy'
   EXPORTING
     #1 = hoja.
 FREE OBJECT hoja.
 counth = countp - 1.
*cambiamos de nombre
 CALL METHOD OF excel 'Sheets' = hoja
   EXPORTING
     #1 = countp.
 CALL METHOD OF plantilla 'Select'.

 SET PROPERTY OF hoja 'Name' = i_pa0001-pernr.

 CALL METHOD OF excel 'Sheets' = hoja
   EXPORTING
     #1 = countp.
 CALL METHOD OF hoja 'Select'.
*nif sociedad
 PERFORM rellenar_celda USING 'C' '7' cif_soc.
 ...
* y voy tratando mi contador countp ya que hay q tener cuidado
* con el rango de numero que acepta. [1,n+1] n = numero de hojas
* totales... ¡¡creo!!! ya no lo recuerdo exactamente...


que mas.... no se, no recuerdo.
Ahora preguntarás ¿ pero de donde te has sacado todos esos nombres!!! de metodos y propiedades y eso...
Pues bien, yo lo que hago es, por cada operacion simple que quiero hacer en excel,
me grabo una macro, y despues veo el codigo que me genera.
Por ejemplo, lo de copiar una hoja al final es el siguiente codigo Visual Basic de Excel.

Código:
	
 sub copiar_hoja()
'
' copiar_hoja macro
 ' '
 sheets("plantilla").Select 'mi primera hoja se llama "plantilla" tambien
' valdria Sheets(1).Select y Sheets(1).Copy
Sheets("plantilla").Copy After:=Sheets(1)
End Sub