Inicio > ABAP/4 > Exportar tabla con columnas a Excel

Exportar tabla con columnas a Excel

Caso: Se desea exportar a Excel el contenido de una tabla SAP, incluyendo como cabecera el nombre de cada columna (la descripción de la misma, no el nombre técnico del campo).

Solución: Se solicita el nombre del archivo Excel y luego se extrae de la tabla indicada deseada (en este caso la T001) las cabeceras de columna y luego su contenido.

Como mejora podría hacerse un PARAMETER para solicitar la tabla a extraer y otro para indicar el archivo Excel…

REPORT  zprueba_formato.
TYPE-POOLS abap.
 
CONSTANTS: c_tabla    TYPE tabname VALUE 'T001',        " Tabla a listar
           c_t_salida TYPE tabname VALUE 'LT_SALIDA'.   " Tabla de salida
 
DATA: lt_campos   TYPE STANDARD TABLE OF dd03l WITH HEADER LINE,
      lt_rollname TYPE STANDARD TABLE OF dd04t WITH HEADER LINE,
      lt_cabeceras TYPE STANDARD TABLE OF fieldnames,
      wa_cabeceras TYPE fieldnames.
 
DATA: lt_salida     TYPE TABLE OF t001,           " Tabla a listar
      wa_salida     TYPE t001,                    " Tabla a listar
      lc_tabname    TYPE tabname,
      lc_tabint     TYPE tabname,
      lv_encoding   TYPE abap_encoding,
      lc_archivo    TYPE string,
      lv_file       TYPE string.
 
FIELD-SYMBOLS:  <fs_tab> TYPE STANDARD TABLE,
                <fs_it> TYPE STANDARD TABLE.
 
REFRESH: lt_campos[],
         lt_rollname[],
         lt_cabeceras[].
 
lv_encoding = '4103'.
 
PERFORM seleccionar_archivo CHANGING lv_file.
lc_tabname = c_tabla.
lc_tabint  = c_t_salida.
 
ASSIGN (lc_tabint) TO <fs_it>.
REFRESH <fs_it>.
SELECT *
  INTO TABLE <fs_it>
  FROM (lc_tabname).
 
*********************
* Cabecera
SELECT tabname position fieldname rollname
  FROM dd03l
  INTO CORRESPONDING FIELDS OF TABLE lt_campos
 WHERE tabname EQ lc_tabname.
 
SELECT rollname scrtext_s scrtext_m scrtext_l
  INTO CORRESPONDING FIELDS OF TABLE lt_rollname
  FROM dd04t
   FOR ALL ENTRIES IN lt_campos
 WHERE rollname = lt_campos-rollname
   AND ddlanguage = sy-langu.
 
SORT lt_campos BY position.
DELETE lt_campos WHERE fieldname(1) = '.'.
 
* Obtengo las cabeceras de columna y las agrego en lt_cabeceras para exportarlas
CLEAR wa_cabeceras.
LOOP AT lt_campos.
  READ TABLE lt_rollname WITH KEY rollname = lt_campos-rollname.
  CLEAR wa_cabeceras.
  wa_cabeceras-fieldname = lt_rollname-scrtext_m.
  APPEND wa_cabeceras TO lt_cabeceras.
ENDLOOP.
 
lc_archivo = lv_file.
CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    filename              = lc_archivo
    filetype              = 'DAT'
    write_field_separator = 'X'
    write_bom             = 'X'
    codepage              = lv_encoding
  TABLES
    data_tab              = <fs_it>
    fieldnames            = lt_cabeceras.
 
 
 
*&---------------------------------------------------------------------*
*&      Form  seleccionar_archivo
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM seleccionar_archivo CHANGING po_file.
 
  DATA: v_usr_action   TYPE i,
        v_path         TYPE string,   " directorio del archivo
        v_fullpath     TYPE string,   " ruta del arhivo completa
        v_filename     TYPE string.   " nombre del archivo
 
  CLEAR: v_usr_action,
         v_path,
         v_fullpath,
         v_filename.
 
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      initial_directory    = 'C:\'
      file_filter          = '*.XLS'
      default_extension    = 'XLS'
    CHANGING
      filename             = v_filename
      path                 = v_path
      fullpath             = v_fullpath
      user_action          = v_usr_action
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
 
  IF sy-subrc IS INITIAL.
    IF v_usr_action EQ cl_gui_frontend_services=>action_ok.
      MOVE v_fullpath TO po_file.
    ENDIF.
  ENDIF.
 
ENDFORM.                    "seleccionar_Archivo
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: