|
#1
|
||||
|
||||
Contenido orden de spool a Excel
Hola a tod@s!
Tengo un report que genera un ALV. Si lo lanzo en fondo, se genera una orden de spool con el contenido de dicho ALV. Hasta ahí bien. Tengo que pasar el contenido de la orden de spool a Excel y lo que he hecho ha sido lo siguiente: he ejecutado la función 'RSPO_RETURN_SPOOLJOB' con el ID de la orden de spool, y luego me he bajado la tabla interna que devuelve con 'GUI_DOWNLOAD'. Pero me surgen dos problemas: 1) Se me genera un archivo .xls, pero me viene toda la información en bloque, plana, tal y como se ve en la orden de spool. Es decir, no me ajusta las columnas del ALV a las columnas del archivo excel. 2) Si el ALV tiene muchas columnas, la orden de spool no me muestra el ALV completo y de rebote, el excel que se me genera tampoco está completo. ¿Alguna idea? Pq me estoy desesperando y por internet no encuentro nada que me sirva... Gracias de antemano!
__________________
Yo misma |
#2
|
|||
|
|||
Hola, nunca lo he usado pero deberías probar con la función RSPO_DOWNLOAD_SPOOLJOB a ver si te funciona
Saludos. |
#3
|
||||
|
||||
Hola!
Gracias por responder. Esa función ya la había probado y tb me lo baja en bloque (todo me lo mete en una única columna de excel). También probé a hacer los mismos pasos que cuando desde la SP01 bajas una orden a excel, pero no funciona la sentencia estándar "SYSTEM-CALL LOAD LISTLEVEL-STACK INTO STACK." (no rellena la variable STACK), así que ya no se qué mas hacer. He optado por crearme una tabla interna dinámica con el contenido de la orden, pero mi problema actual es que si el ALV es muy largo y no salen todas las columnas en la orden de spool, en mi excel tp Alguna idea?
__________________
Yo misma |
#4
|
|||
|
|||
Para crear el excel formateado y que no te lo meta todo en una columna creo que habria 3 posibles caminos
Bueno, lo primero voy a suponer que en tu programa en algun momento tendras una tabla interna con los datos que quieres volcar en el excel 1.- Puedes ir recorriendo cada linea de la tabla y a su vez cada campo y mediante objetos OLE ir metiendo cada valor en una celda del excel, hay muchos ejemplos de manejo de objetos excel mediante OLE pero es complicado 2.- Otra cosa que podria probar es lo siguiente, tienes que implementar el codigo necesario para recorrer la linea y a su vez cada campo de la linea, ir concatenando los valores de los campos en una variable string separandolos mediante un tabulador y asi obtener una tabla en la que cada linea sera un string que tiene todos los valores concatenados y separados por tabulador, despues esa tabla la podrias descargar a fichero mediante la GUI_DOWNLOAD, prueba a bajarlo como ASC y ponerle extension .xls al nombre del fichero, te dejo un codigo de prueba para que te hagas a la idea de lo que quiero decir data: lv_string type string. data: lt_string type table of string. field-symbols: <campo> type any. loop at tabla into linea. clear: lv_string. do. assign component sy-index of structure linea to <campo>. if sy-subrc is initial. concatenate lv_string CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB <campo> into lv_string. else. exit. endif. append lv_string to lt_string. enddo. endloop. Con esto al final tendrias una tabla con todos los campos concatenados y separados por tabulador 3.- La ultima opcion seria descargarte la tabla a fichero igual que lo haces ahora, y te lo deja en un excel pero todo metido en una columna, lo que harias en tu programa en que despues de descargar el fichero a excel ejecutarias una macro que seria la que te formatearia el excel y convertiria lo que hay en una columna a varias columnas Para ejecutar una macro de excel el codigo mas o menos seria INCLUDE OLE2INCL. data: go_Excel type ole2_object. CREATE OBJECT go_Excel 'EXCEL.APPLICATION'. CALL METHOD OF go_Excel 'RUN' EXPORTING #1 = "NombredelaMacro". La macro tendrias que crearla en el libro de macros personales para que este disponible en todos los libros de excel Para la grabacion de la macro tendrias que utilizar la utilidad de texto a columnas de excel |
#5
|
||||
|
||||
Es que el problema que tengo es que no parto de una tabla interna completa.
Si el ALV tiene muchas columnas (es muy ancho) en la spool no sale, y al leer su contenido mi tabla interna está también incompleta
__________________
Yo misma |
#6
|
|||
|
|||
Al lanzar procesos de fondo, es posible setear la lontigud del spool de salida para que su contenido no aparezca truncado. ¿De qué manera lo estás ejecutando? |
Herramientas | Buscar en Tema |
Desplegado | |
|
|