Copiar/pegar en un ALV Grid

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Abapor
    Member
    • may
    • 34

    #16
    Hola amigos ,
    creo que funciona queda solo algunas dudas , a ver si alguien tiene una solucion
    el codigo es :

    Código:
    DATA : BEGIN OF i_tabla OCCURS 0,
              nombre(50) TYPE c ,
              apll(50)   TYPE c ,
           END OF i_tabla.
          
    DATA: 
    *     Tabla para recuperar los datos que estan en el clipboard
          file_table_clip TYPE STANDARD TABLE OF file_table.
          
    DATA: wa_file(1024).
    CONSTANTS : hexa1 TYPE x VALUE '09'.
    
    CALL METHOD cl_gui_frontend_services=>clipboard_import
      IMPORTING
        data                 = file_table_clip
    *    LENGTH               =
      EXCEPTIONS
        cntl_error           = 1
        error_no_gui         = 2
        not_supported_by_gui = 3
        OTHERS               = 4
            .
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    
    LOOP AT file_table_clip INTO wa_file.
    
        SPLIT wa_file AT hexa1 INTO i_tabla-nombre
                                     i_tabla-apll .
        APPEND i_tabla.
      ENDLOOP.

    he podido recuperar los datos que he copiado desde Excel en la tabla file_table_clip .
    ahora queda solo hacer un SPLIT en los campos de mi tabla interna.
    El separador es '#' ( que significa '09' en hexadecimal ).
    pues el problema ahora es : cuando declaro el separado de esa manera :
    Código:
    CONSTANTS : hexa1 TYPE x VALUE '09'.
    el sistema me da un error : "HEXA1" must be a character-type data object (data type C, N, D, T or STRING ) , la solucion de este error es :
    1- ir a: Pasar a / Atributos
    2- Os saltará una pantalla, pues abajo a la izquierda hay que quitar el flag Verif.unicode activas.

    pero cuando quito ese flag , el sistma me da otro error : The program "Y_PROG" is not Unicode-compatible, according to its program attributes.
    por eso he cambiado la declaracion del separador :
    Código:
    CONSTANTS : hexa1(1) TYPE c VALUE '#'.
    .
    Ahora en el debuger veo que no funciona muy bien el SPLIT , todo los datos se almacenan en el primer campo de la tabla interna i_tabla-nombre .

    NB : la forma del fichero Excel es :
    Nombre Apellido
    ***** *****
    ***** *****

    espero que lo explico bien
    muchas gracias de antemano

    Comentario

    • pmarinab
      Member
      • abr
      • 64

      #17
      Yo no creo que el caracter de separación sea '#', lo que ocurre es que seguramente se trate de un retorno de carro o algo parcido, que no se puede representar y por eso te aparece así.

      Yo probaría con la clase CL_ABAP_CHAR_UTILITIES, en la que están definidos los caracteres especiales más habituales. Prueba por ejemplo con este (tabulador horizontal), y si no funciona prueba con otros.

      CONSTANTS : hexa1(1) TYPE c VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

      Comentario

      • Abapor
        Member
        • may
        • 34

        #18
        Hola todos ,
        si tienes razon pmarinab con esa declaracion el programa funciona muy bien , exactamente como lo queria.

        Código:
        DATA : BEGIN OF i_tabla OCCURS 0,
                  nombre(50) TYPE c ,
                  apll(50)   TYPE c ,
               END OF i_tabla.
        
        DATA:
        *     Tabla para recuperar los datos que estan en el clipboard
              file_table_clip TYPE STANDARD TABLE OF file_table.
        
        DATA: wa_file(1024),
              mystring(300) TYPE c.
         CONSTANTS :
         hexa1(1) TYPE c VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
        
        
        CALL METHOD cl_gui_frontend_services=>clipboard_import
          IMPORTING
            data                 = file_table_clip
        *    LENGTH               =
          EXCEPTIONS
            cntl_error           = 1
            error_no_gui         = 2
            not_supported_by_gui = 3
            OTHERS               = 4
                .
        IF sy-subrc <> 0.
          EXIT.
        ENDIF.
        
        LOOP AT file_table_clip INTO mystring.
        
            SPLIT mystring AT hexa1 INTO i_tabla-nombre
                                         i_tabla-apll .
            APPEND i_tabla.
          ENDLOOP.
        con este codigo podemos hacer Copy / Paste en ALV .
        espero que va a ayudar a alguien .

        muchismas gracias a todos por sus ayuda

        Comentario

        Trabajando...