ALV no genera datos en hoja de cálculo

Buen día, mis estimados.

Solicitando de su valiosa ayuda, ya que ya no sé ni qué revisar. Resulta que tengo un reporte ALV utilizando REUSE_ALV_GRID_DISPLAY, y para la barra de herramientas copio el PF-STATUS STANDARD con el nombre ZSTANDARD y se lo asigno a mi reporte. El problema viene cuando quiero utilizar el botón para exportar mi reporte a una Hoja de cálculo image, ya que si selecciono la opción para xlsx no me muestra los datos, sololamente muestra la cabecera, sin embargo en la opción xxl sí me muestra los datos. ¿Qué puede ser?.

En otros reportes sí funciona ese botón y exporta los datos correctamente, por lo que supongo debe ser alguna opción en el ALV.

Agradezco de antemano su ayuda.

Yo tengo un problema similar, pero lo que no consigo es evitar el aviso( que me da EXCEL al abrir el documento) de que la extensión no es compatible, pero si que lo puedo abrir y ver los datos correctamente.

Adjunto el FORM que tengo para descargar a Excel (al apretar un botón creado por mi) una tabla que he creado dinámicamente, la cual solo contiene las columnas visibles de un layout elegido en la pantalla de selección.

FORM descarga USING it_fieldcats TYPE lvc_t_fcat.

  DATA: lv_name_str TYPE string.
  DATA: lv_name LIKE rlgrap-filename.
  DATA: lv_name_xls TYPE string VALUE '.xls'.
  DATA:BEGIN OF excel_heading,
         text(20) TYPE c,
       END OF excel_heading.
  DATA:it_heading LIKE STANDARD TABLE OF excel_heading
        INITIAL SIZE 0.
  DATA: ls_fieldcatdownload LIKE LINE OF it_fieldcats.

" Cojemos los nombres del fielcat para la cabecera del Excel

  LOOP AT it_fieldcats INTO ls_fieldcatdownload.
    excel_heading-text = ls_fieldcatdownload-fieldname.
    APPEND excel_heading TO it_heading.
  ENDLOOP.

  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      static    = 'X'
    CHANGING
      file_name = lv_name.
  IF lv_name IS NOT INITIAL.
    MOVE lv_name TO lv_name_str.

    CONCATENATE lv_name_str lv_name_xls INTO lv_name_str.

    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        write_field_separator = '#'
        header                = '00'
        trunc_trailing_blanks = 'X'
        filetype              = 'DAT'
        filename              = lv_name_str
        show_transfer_status  = abap_true
      TABLES
        data_tab              = <l_table>
        fieldnames            = it_heading[].
  ENDIF.
ENDFORM.
1 me gusta

Muchas gracias por tu respuesta. Ya me temía que tuviera que agregar un botón aparte, pues por más que he investigado no doy con la solución.

2 Me gusta

has intentado cargar tu plantilla en XLS?
no soy programador, pero en ocasiones cada que pido que me hagan desarrollo en Excel mis consultores ABAP me recomiendan usar XLS en vez de XLSX por problemas de compatibilidad

Me falta añadir el método para guardar en una tabla dinámica(que exporto a EXCEL con el método que esta más arriba) las columnas visibles que tengo definidas en el layout que le paso en la pantalla de selección.

Es el siguiente:

*Obtenemos como resultado la tabla <l_table>, con la columnas que tiene el layout seleccionado.
FORM get_table CHANGING it_fieldcats TYPE lvc_t_fcat.

  DATA: new_table TYPE REF TO data.
  FREE new_table.
  DATA: wa_ltdx      TYPE ltdx,
        v_varkey     TYPE ltdxkey,
        it_fcat      TYPE STANDARD TABLE OF ltdxdata,
        it_sort_info TYPE STANDARD TABLE OF ltdxdata,
        it_filter    TYPE STANDARD TABLE OF ltdxdata.
  CONSTANTS: c_relid      TYPE ltdx-relid VALUE 'LT'.
  DATA: it_fieldcat TYPE lvc_t_fcat,
        is_fieldcats LIKE LINE OF it_fieldcat.

  SELECT SINGLE * FROM ltdx INTO wa_ltdx
         WHERE relid = c_relid
         AND report =  sy-repid
        AND variant = variant-variant.
  IF sy-subrc = 0.
    MOVE-CORRESPONDING wa_ltdx TO  v_varkey.

    " Esta funcion devuelte en it_fcat el fieldcatalog que tiene el layout elegido pero hay que sacar los nombres de las columnas que son visibles.
    CALL FUNCTION 'LT_DBDATA_READ_FROM_LTDX'
      EXPORTING
        i_tool       = c_relid
        is_varkey    = v_varkey
      TABLES
        t_dbfieldcat = it_fcat           " To create Field Catalog
        t_dbsortinfo = it_sort_info      " Sort category set
        t_dbfilter   = it_filter.        " Filter category set
  ENDIF.
  DATA: wa_it_fcat LIKE LINE OF it_fcat.
  DATA: name(10) TYPE c.

* Con este loop eliminamos del fieldcat las columnas que estan con NO_OUT = 'X'.
  LOOP AT it_fcat INTO wa_it_fcat.
    IF wa_it_fcat-param = 'NO_OUT' AND wa_it_fcat-value = 'X'.
      name = wa_it_fcat-key1.
      DELETE it_fcat WHERE key1 = name.
    ENDIF.
    CLEAR wa_it_fcat.
  ENDLOOP.

* Se borran las entradas repetidas para quedarnos solamente con los nombres de las columnas que resultan.
  DELETE ADJACENT DUPLICATES FROM it_fcat COMPARING key1. " it_fcat contiene las columnas visibles del layout elegido en parámetro.
*************************************************************************
*Obtenemps en it_fieldcats los nombres de las columnas visibles.
  LOOP AT it_fcat INTO wa_it_fcat.
    is_fieldcats-fieldname = wa_it_fcat-key1.
    APPEND is_fieldcats TO it_fieldcats.
  ENDLOOP.

* Creamos nueva tabla dinamica con el it_fieldcats que hemos calculado.
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_fieldcats
    IMPORTING
      ep_table        = new_table. " tabla dinamica con las columnas del layout

*Asignamos la nueva tabla a una Fiel-Symbol de tipo standard table.
  ASSIGN new_table->* TO <l_table>.

* Movemos los datos de itab que corresponden con las columnas de <l_table>
  MOVE-CORRESPONDING itab TO <l_table>.
  " <l_table> contiene ahora clumnas y datos correspondientes desde la tabla itab acorde al layout elegido.
***************************************************************************
ENDFORM.

No me aparece la opción para XLS:
image

Y de todas esas solo XXL funciona.

Te agradezco mucho @andreicadar!

Hola, no pasa nada si no te sale el formato, yo lo hice concatenando el nombre que le pongo en CALL FUNCTION ‘KD_GET_FILENAME_ON_F4’ con el string lv_name_xls que es simplemente ‘.xls’, para que a la hora de guardar el archivo lo guarde en formato xls.


DATA: lv_name_xls TYPE string VALUE '.xls'.    

CONCATENATE lv_name_str lv_name_xls INTO lv_name_str.

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.