Por que mi Programa no lee mi Archivo Excel?

Hola, muy buenas tardes, como se encuentran todos?

vengo a preguntar si es posible que me den una idea del por que al cargar un archivo de Excel a mi programa, este no lo lee, según el Debugger, no accede o no se levanta y por ende, no carga la información de mi archivo.

Dejo mi código por si algo esta mal ahi, debo decir que me lo compartieron y solo copie y pegue, pero según con eso, funcionaria adecuadamente.

Codigo Main

*&---------------------------------------------------------------------*
*& Report ZEXCEL_CALL_CYDSA_EBZ
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZEXCEL_CALL_CYDSA_EBZ.

INCLUDE ZEXCEL_CALL_CYDSA_EBZ_TOP.

INCLUDE ZEXCEL_CALL_CYDSA_EBZ_F01.

*&---------------------------------------------------------------------*
* CONTROL DE PARÁMETROS                                                *
*&---------------------------------------------------------------------*
at selection-screen  on value-request for filename.
* Se obtiene la ruta del archivo local donde se leerá el archivo
  perform f_route_file.


START-OF-SELECTION.

PERFORM F_CARGA_EXCEL. " Crear Materiales para la carga

Codigo TOP

*&---------------------------------------------------------------------*
*& Include          ZEXCEL_CALL_CYDSA_EBZ_TOP
*&---------------------------------------------------------------------*

TYPES: BEGIN OF ty_alsmex,
         row      TYPE   numc4,
         col      TYPE   numc4,
         value     TYPE  char50,
         pestania TYPE  char30,
       END OF ty_alsmex.

DATA: lt_zalsmex_tabline TYPE STANDARD TABLE OF ty_alsmex.

TYPE-POOLS: ole2.

TYPES: ty_d_itabvalue             TYPE char50.


TYPES: BEGIN OF ty_s_senderline,
         line(4096) TYPE c,
       END OF ty_s_senderline,
       ty_t_itab   TYPE STANDARD TABLE OF ty_alsmex,

       ty_t_sender TYPE ty_s_senderline  OCCURS 0.

CONSTANTS:  gc_esc              VALUE '"'.

DATA:
*       FILENAME  TYPE rlgrap-filename, "Archivo Layout
  i_begin_col   TYPE i,
  i_begin_row   TYPE i,
  i_end_col     TYPE i,
  i_end_row     TYPE i,
  intern_salida TYPE STANDARD TABLE OF ty_alsmex WITH HEADER LINE.

* Variables Locales
DATA: l_excel  TYPE ole2_object,
      l_libro  TYPE ole2_object,
      l_hoja   TYPE ole2_object,
      l_cont   TYPE i,
      l_celli  TYPE ole2_object,
      l_cellf  TYPE ole2_object,
      l_cell   TYPE ole2_object,
      lt_tabla TYPE TABLE OF ty_s_senderline.

DATA: ld_separator          TYPE  c.

DATA: ld_rc                 TYPE i.

DATA: intern                TYPE STANDARD TABLE OF ty_alsmex WITH HEADER LINE.

DATA: lf_pestania(50).

*&---------------------------------------------------------------------*
*&  Definición de variables                                            *
*&---------------------------------------------------------------------*
DATA: ft TYPE filetable,
      rc TYPE i.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS:
              filename  TYPE rlgrap-filename OBLIGATORY. "Archivo Layout
*            c_inser TYPE c as CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

Codigo F01

*&---------------------------------------------------------------------*
*& Include          ZEXCEL_CALL_CYDSA_EBZ_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form f_route_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM f_route_file .

  CLEAR: ft, rc.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      default_filename        = '*'
    CHANGING
      file_table              = ft
      rc                      = rc
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ELSE.
    READ TABLE ft INDEX 1 INTO filename.
  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_CARGA_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM f_carga_excel .

** COORDENADAS DEL ARCHIVO EXCEL
  i_begin_col  = 1.
  i_begin_row  = 3.
  i_end_col    = 5.
  i_end_row    = 300.

* Abrimos el Excel
  IF l_excel-header = space OR l_excel-handle = -1.
    CREATE OBJECT l_excel 'Excel.Application'.
  ENDIF.
  CALL METHOD OF l_excel 'Workbooks' = l_libro.
  CALL METHOD OF l_libro 'Open'
    EXPORTING
      #1 = filename.


* Se identifica el separador de campos
  CLASS cl_abap_char_utilities DEFINITION LOAD.
  ld_separator = cl_abap_char_utilities=>horizontal_tab.

* Recorremos las Hojas del Excel
  DO.

*-- Incrementamos el Contador para ir de hoja en hoja
    ADD 1 TO l_cont.

*-- Limpiamos los objetos
    FREE OBJECT: l_cell, l_celli, l_cellf, l_hoja.
    CLEAR lt_tabla[].

*-- Leemos la Hoja
    CALL METHOD OF l_excel 'Worksheets' = l_hoja
      EXPORTING
        #1 = l_cont.

*-- Si no existe la hoja Salimos del Bucle
    IF NOT sy-subrc IS INITIAL.
      EXIT.
    ENDIF.

*   Tomamos el nombre de la pestaña
    GET PROPERTY OF l_hoja 'NAME' = lf_pestania.
    COMMIT WORK AND WAIT.


*-- Recogemos la Primera Celda
    CALL METHOD OF l_hoja 'Cells' = l_celli
      EXPORTING
        #1 = i_begin_row
        #2 = i_begin_col.
    COMMIT WORK AND WAIT.


*-- Recogemos la Ultima Celda
    CALL METHOD OF l_hoja 'Cells' = l_cellf
      EXPORTING
        #1 = i_end_row
        #2 = i_end_col.
    COMMIT WORK AND WAIT.

*-- Recogemos las celdas comprendidas entre la Primera y la Ultima
*-- y lo copiamos a la memoria intermedia
    CALL METHOD OF l_hoja 'RANGE' = l_cell
      EXPORTING
        #1 = l_celli
        #2 = l_cellf.
    COMMIT WORK AND WAIT.
    CALL METHOD OF l_cell 'SELECT'.
    COMMIT WORK AND WAIT.
    CALL METHOD OF l_cell 'COPY'.


*-- Recogemos los Valores del portapapeles
    CALL METHOD cl_gui_frontend_services=>clipboard_import
      IMPORTING
        data                 = lt_tabla
      EXCEPTIONS
        cntl_error           = 1
        error_no_gui         = 2
        not_supported_by_gui = 3
        OTHERS               = 4.

    IF sy-subrc <> 0.
      MESSAGE a037(alsmex).
    ENDIF.

*-- Limpiamos los valores en blanco
    SORT lt_tabla.
    DELETE lt_tabla WHERE line EQ space.
    CLEAR: sy-subrc.

*-- Recogemos los datos a la tabla de Salida
    CHECK NOT lt_tabla[] IS INITIAL.


    PERFORM separated_to_intern_convert TABLES lt_tabla intern
                                        USING  ld_separator.

*   Se vuelca el contenido de la hoja tratada en la tabla con la
*   identificación de la pestaña.
    LOOP AT intern.
      CLEAR intern_salida.
      intern_salida-pestania = lf_pestania.
      MOVE-CORRESPONDING intern TO intern_salida.
      APPEND intern_salida.


***** AGREGAR LÓGICA PARA GUARDAR REGISTROS EN TABLA INTERNA INI
** La tabla interna debe ser equivalente al layout de excel.


***** AGREGAR LÓGICA PARA GUARDAR REGISTROS EN TABLA INTERNA FIN


    ENDLOOP.

*   borramos el portapapeles
    REFRESH lt_tabla.
    CALL METHOD cl_gui_frontend_services=>clipboard_export
      IMPORTING
        data       = lt_tabla
      CHANGING
        rc         = ld_rc
      EXCEPTIONS
        cntl_error = 1
*       ERROR_NO_GUI         = 2
*       NOT_SUPPORTED_BY_GUI = 3
        OTHERS     = 4.

  ENDDO.

* Cerramos el Excel
  CALL METHOD OF l_excel 'QUIT'.

*-- Limpiamos los objetos
  FREE OBJECT l_libro.
  FREE OBJECT l_hoja.

  FREE OBJECT l_excel.
  FREE OBJECT l_celli.
  FREE OBJECT l_cellf.
  FREE OBJECT l_cell.


ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  SEPARATED_TO_INTERN_CONVERT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM separated_to_intern_convert TABLES i_tab       TYPE ty_t_sender
                                        i_intern    TYPE ty_t_itab
                                 USING  i_separator TYPE c.
  DATA: l_sic_tabix LIKE sy-tabix,
        l_sic_col   TYPE kcd_ex_col.
  DATA: l_fdpos     LIKE sy-fdpos.

  REFRESH i_intern.

  LOOP AT i_tab.
    l_sic_tabix = sy-tabix.
    l_sic_col = 0.
    WHILE i_tab CA i_separator.
      l_fdpos = sy-fdpos.
      l_sic_col = l_sic_col + 1.
      PERFORM line_to_cell_separat TABLES i_intern
                                   USING  i_tab l_sic_tabix l_sic_col
                                          i_separator l_fdpos.
    ENDWHILE.
    IF i_tab <> space.
      CLEAR i_intern.
      i_intern-row = l_sic_tabix.
      i_intern-col = l_sic_col + 1.
      i_intern-value = i_tab.
      APPEND i_intern.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " SEPARATED_TO_INTERN_CONVERT

*&---------------------------------------------------------------------*
*&      Form  line_to_cell_separat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM line_to_cell_separat TABLES i_intern    TYPE ty_t_itab
                          USING  i_line
                                 i_row       LIKE sy-tabix
                                 ch_cell_col TYPE kcd_ex_col
                                 i_separator TYPE c
                                 i_fdpos     LIKE sy-fdpos.

  DATA: l_string   TYPE ty_s_senderline.
  DATA  l_sic_int  TYPE i.

  CLEAR i_intern.
  l_sic_int = i_fdpos.
  i_intern-row = i_row.
  l_string = i_line.
  i_intern-col = ch_cell_col.
* csv Dateien mit separator in Zelle: --> ;"abc;cd";
  IF ( i_separator = ';' OR  i_separator = ',' ) AND
       l_string(1) = gc_esc.
    PERFORM line_to_cell_esc_sep USING l_string
                                       l_sic_int
                                       i_separator
                                       i_intern-value.
  ELSE.
    IF l_sic_int > 0.
      i_intern-value = i_line(l_sic_int).
    ENDIF.
  ENDIF.
  IF l_sic_int > 0.
    APPEND i_intern.
  ENDIF.
  l_sic_int = l_sic_int + 1.
  i_line = i_line+l_sic_int.
ENDFORM.                    "line_to_cell_separat

*&---------------------------------------------------------------------*
*&      Form  line_to_cell_esc_sep
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM line_to_cell_esc_sep USING i_string
                                i_sic_int      TYPE i
                                i_separator    TYPE c
                                i_intern_value TYPE ty_d_itabvalue.
  DATA: l_int         TYPE i,
        l_cell_end(2).
  FIELD-SYMBOLS: <l_cell>.
  l_cell_end = gc_esc.
  l_cell_end+1 = i_separator .

  IF i_string CS gc_esc.
    i_string = i_string+1.
    IF i_string CS l_cell_end.
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 2.
      i_sic_int = l_int.
      i_string = i_string+l_int.
    ELSEIF i_string CS gc_esc.
*     letzte Celle
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 1.
      i_sic_int = l_int.
      i_string = i_string+l_int.
      l_int = strlen( i_string ).
      IF l_int > 0 . MESSAGE x001(kx) . ENDIF.
    ELSE.
      MESSAGE x001(kx) . "was ist mit csv-Format
    ENDIF.
  ENDIF.

ENDFORM.                    "line_to_cell_esc_sep

Es la primera vez que pregunto algo, asi que si hice algo mal o no era asi el formato, una disculpa.

Gracias de antemano por leer y por su ayuda.

Saludos

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.