Cargar un archivo EXCEL

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • josefon
    Member
    • mar
    • 61

    #1

    Cargar un archivo EXCEL

    Que tal! como estan??

    Bueno les comento que necesito cargar en una tabla interna un archivo en excel pero no encuentro como cargarlo alguien sabe que funcion puedo utilizar???

    Gracias
    saludos
  • Mike
    Senior Member
    • mar
    • 144

    #2
    Josefon

    Esta Función se encarga de pasar lo que tienes en un documento excel a una tabla interna

    CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
    EXPORTING
    FILENAME = 'Ruta y nombre del archivo excel'
    I_BEGIN_COL = Columna en donde comienza el archivo
    I_BEGIN_ROW = Fila e donde comienza el archivo
    I_END_COL = Ultima columna del archivo
    I_END_ROW = Ultima fila del archivo
    TABLES
    INTERN = Tabla interna a llenar
    EXCEPTIONS
    INCONSISTENT_PARAMETERS = 1
    UPLOAD_OLE = 2.

    Ya ahi lo que tienes que hacer es jugar con la tabla interna, dependiendo de lo que quieras hacer..

    Saludos,
    Mike

    Comentario

    • josefon
      Member
      • mar
      • 61

      #3
      Muchas gracias Mike!!

      ya la habia encontrado esa.. lo que me causa ruido es el hecho de que tengo que decirle en que columna empezar y cual terminar.. no???

      gracias
      saludos

      Comentario

      • Mike
        Senior Member
        • mar
        • 144

        #4
        Si, es verdad pero bueno eso es lo que hay, y hasta los momentos me ha funcionado, claro tienes que saber la fila y columna en la que empieza y termina el archivo... Si consigues otra me gustaria saberla.

        Suerte,


        Saludos,
        Mike

        Comentario

        • josefon
          Member
          • mar
          • 61

          #5
          Que tal!! pues despues de 2 dias de busqueda pues por fin encontre una forma de subir un archivo en excel a una tabla interna.
          la funcion se llama TEXT_CONVERT_XLS_TO_SAP. aki el ejemplo.

          CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
          EXPORTING
          i_line_header = 'X' "Si dejan este campo te quita una linea de tu archivo como header
          i_tab_raw_data = it_raw " WORK TABLE
          i_filename = p_entra
          TABLES
          i_tab_converted_data = t_upload[] "ACTUAL DATA
          EXCEPTIONS
          conversion_failed = 1
          OTHERS = 2.

          lo malo es que si se tarda un poco.. por ejemplo con
          150 lineas se tardo 1.48 minutos y con 1350 se tardo 10.40 minutos

          se me habia ocurrido que si tu sabes cuantas lineas y columnas tiene tu EXCEL pues ocupar la funcion propuesta por MIKE pero si no sabes cuantas trae pues ocupar la TEXT_CONVERT_XLS_TO_SAP voy a invertigar si hay una forma de mejorar esta funcion para reducir el tiempo de carga..

          en fin ojala les funcione...

          saludos
          Editado por última vez por josefon; 03/04/2006, 17:58:59.

          Comentario

          • Marco
            Senior Member
            • abr
            • 141

            #6
            Hola,
            Claro... la funcion en donde poner parametros es mas rapida, el otro modo te levanta todo el Excel al parecer (muy lento). Lo q se tiene q definir seria un standard en el formato excel, para de esa manera saberla y subir solo lo especifico (es lo recomendado).. Ahora si no sabes y quieres subir Excel de cualquier tamaño, como que se tardará tu mismo lo haz visto. Mas bien si quieres hacer eso por ahi se me acurre que crees un paso mas, el de convertir tu Excel a Texto y subirlo como texto (separado por espacios), es mucho mas rapido comparado con el Excel y tienes el mismo resultado.

            Saludos
            Cuidense,

            Comentario

            • ominorca
              Junior Member
              • jul
              • 11

              #7
              Buenas estoy usando la misma funcion pero me da un error.
              Mi codigo es este:
              CALL FUNCTION 'WS_FILENAME_GET'
              EXPORTING
              def_filename = p_file
              def_path = 'c:\'
              mask = ',*.* ,*.*.'
              mode = 'O'
              IMPORTING
              filename = p_file
              EXCEPTIONS
              inv_winsys = 1
              no_batch = 2
              selection_cancel = 3
              selection_error = 4
              OTHERS = 5.

              START-OF-SELECTION.

              CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
              EXPORTING
              * I_FIELD_SEPERATOR =
              * I_LINE_HEADER =
              i_tab_raw_data = w_tabla
              i_filename = p_file
              tables
              i_tab_converted_data = t_tabla
              * EXCEPTIONS
              * CONVERSION_FAILED = 1
              * OTHERS = 2


              P_file lleva el fichero.
              T_tabla la tabla a cargar.
              w_tabla esta definido como en la funcion pero no se que le tengo que pasar.
              Un saludo.

              Comentario

              • mamt
                Junior Member
                • sep
                • 10

                #8
                Carga Archivo Excel

                hola sabes que al ejecutar el programa que carga la funcion , me da un error


                Type conflict when calling function module "KCD_EXCEL_OLE_TO_INT_CONVERT".

                sabes a qe se debe este error, ahora si tienes otra funcion te lo agradeciria
                gracias


                Originalmente publicado por Mike
                Josefon

                Esta Función se encarga de pasar lo que tienes en un documento excel a una tabla interna

                CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
                EXPORTING
                FILENAME = 'Ruta y nombre del archivo excel'
                I_BEGIN_COL = Columna en donde comienza el archivo
                I_BEGIN_ROW = Fila e donde comienza el archivo
                I_END_COL = Ultima columna del archivo
                I_END_ROW = Ultima fila del archivo
                TABLES
                INTERN = Tabla interna a llenar
                EXCEPTIONS
                INCONSISTENT_PARAMETERS = 1
                UPLOAD_OLE = 2.

                Ya ahi lo que tienes que hacer es jugar con la tabla interna, dependiendo de lo que quieras hacer..

                Saludos,
                Mike

                Comentario

                • DavidXD_XD
                  Moderator
                  • ago
                  • 1255

                  #9
                  Hola ... yo cargo una tabla interna desde un excel con la funcion:
                  ALSM_EXCEL_TO_INTERNAL_TABLE

                  Código:
                  [COLOR="Blue"]*&---------------------------------------------------------------------*
                  *&      Form  upload_excel
                  *&---------------------------------------------------------------------*
                  *       Cargar archivo excel
                  *----------------------------------------------------------------------*
                  *      -->PT_DUA  : Tabla interna de estructura de archivo excel
                  *      -->P_PATH  : Ruta de archivo excel
                  *----------------------------------------------------------------------*[/COLOR]
                  FORM upload_excel TABLES pt_dua LIKE ti_dua[]
                                     USING p_path.
                  
                  [COLOR="blue"]* Variables globales[/COLOR]
                    DATA: lt_excel TYPE TABLE OF alsmex_tabline,
                          l_index  TYPE i.
                  
                    DATA: l_cont(2)   TYPE c,
                          l_cadena    TYPE string,
                          l_start_col TYPE i VALUE 1,
                          l_start_row TYPE i VALUE 5,
                          l_end_col   TYPE i VALUE 6,
                          l_end_row   TYPE i VALUE 65536.
                  
                    CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
                        EXPORTING
                            FILENAME                = p_path
                            I_BEGIN_COL             = l_start_col
                            I_BEGIN_ROW             = l_start_row
                            I_END_COL               = l_end_col
                            I_END_ROW               = l_end_row
                        TABLES
                            INTERN                  = lt_excel
                        EXCEPTIONS
                            INCONSISTENT_PARAMETERS = 1
                            UPLOAD_OLE              = 2
                            OTHERS                  = 3.
                  
                    IF sy-subrc <> 0.
                      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
                    ENDIF.
                  
                    CHECK NOT lt_excel[] IS INITIAL.
                  
                    FIELD-SYMBOLS: <fs_excel> LIKE LINE OF lt_excel,
                                   <fs>.
                  
                    LOOP AT lt_excel ASSIGNING <fs_excel>.
                      IF <fs_excel>-col = '0001'.
                        l_cont = strlen( <fs_excel>-value ).
                        IF l_cont NE '18'.
                          EXIT.
                        ENDIF.
                      ENDIF.
                      MOVE <fs_excel>-col TO l_index.
                      ASSIGN COMPONENT l_index OF STRUCTURE pt_dua TO <fs>.
                      MOVE <fs_excel>-value TO <fs>.
                      AT END OF row.
                        APPEND pt_dua.
                        CLEAR pt_dua.
                      ENDAT.
                    ENDLOOP.
                  
                  ENDFORM.                    " upload_excel
                  David Carballido Córdova

                  Comentario

                  • lauracarolina
                    Member
                    • jul
                    • 32

                    #10
                    pregunta

                    hola david...dime y si no sabes cual es el final de la tabla en excel??se el inicio de la tabla en un formato que me dan pero no se cuantas filas pueda tener ya que varian....gracias de antemano
                    LAURA CAROLINA VASQUEZ NOVOA-ING INFORMATICA
                    Consultora ABAP

                    Comentario

                    • bisonye
                      Senior Member
                      • ago
                      • 635

                      #11
                      Originalmente publicado por lauracarolina
                      hola david...dime y si no sabes cual es el final de la tabla en excel??se el inicio de la tabla en un formato que me dan pero no se cuantas filas pueda tener ya que varian....gracias de antemano
                      Yo creo que la mejor forma de cargarlo es transformando el excel en fichero de texto y luego cargarlo a sap. Es un paso que cualquiere usuario puede hacer y la carga del archivo es mucho más rápida.

                      Saludos
                      http://sapymas.blogspot.com/

                      Comentario

                      • lauracarolina
                        Member
                        • jul
                        • 32

                        #12
                        alguna otra solucion????
                        LAURA CAROLINA VASQUEZ NOVOA-ING INFORMATICA
                        Consultora ABAP

                        Comentario

                        • Rodolfo Montiel Rivera
                          Member
                          • oct
                          • 92

                          #13
                          Otra función para opción a tu desarrollo

                          Puedes utilizar esta a mi me sirvio muy bien solo te describo algunos detalles:

                          1.- Cada registro de tu excel te lo inserta en un solo campo string pero para diferenciar los campos este lo separa con su slash '|' por lo cual tendras que validar algunos aspectos como ancho de columnas desde el layout de excel.

                          2.- Debes tener cuidado al acomodar ya que este toma encuenta el primer valor que encuentre en tu registro y de ahi es donde te empieza a tomar la columna osea si tiene columna A B C D pero tu llenas el valor desde la B1 no contara la columna A y te marcara menos columnas.

                          Pero eso ya solo en concepto de validacion pero en realidad la funcion se adpata muy bien a tu requerimiento ya que puedes tener la cantidad de calomnas y valores que quieras despues ya solo es cosas de un buen split y acomodar bien las caidas en su campo correspondiente.

                          Código:
                            CALL FUNCTION 'FAA_FILE_UPLOAD_EXCEL'
                              EXPORTING
                                i_filename           = pa_file
                                i_delimiter          = '|'
                              TABLES
                                et_filecontent       = tb_excel
                              EXCEPTIONS
                                error_accessing_file = 1
                                OTHERS               = 2.
                            IF sy-subrc <> 0.
                              MESSAGE s000(zats) DISPLAY LIKE 'E'
                                 WITH text-017.
                              v_error   = 'X'.
                              v_procesa = 'X'.
                              EXIT.
                            ENDIF.
                          PD. Te adjunto todo el programa para mayor referencia ya que lo hice y esta muy bien validado. Saludos!!
                          Archivos Adjuntos
                          Editado por última vez por Rodolfo Montiel Rivera; 13/02/2009, 17:30:36.
                          01010000
                          01001010
                          10011000
                          10100001

                          De Byte a Beat.

                          Comentario

                          • lauracarolina
                            Member
                            • jul
                            • 32

                            #14
                            gracias por tu ayuda, pero cuando intento poner esa funcion en SAP me dice que no existe :S ...
                            LAURA CAROLINA VASQUEZ NOVOA-ING INFORMATICA
                            Consultora ABAP

                            Comentario

                            • javi_polo
                              Junior Member
                              • feb
                              • 1

                              #15
                              Prueba con la función FILE_READ_AND_CONVERT_SAP_DATA

                              Hola,

                              Creo que te podría servir la función FILE_READ_AND_CONVERT_SAP_DATA. Como argumento a esta función le tienes que pasar una tabla interna con una estructura de columnas igual a la estructura de columnas de tu excel pero la función ya contiene la rutina que lee sólo el número de filas que tiene la excel.

                              Te paso un ejemplo de un programa que lee un fichero excel con dos columnas de un caracter e imprime el contenido de dichas columnas:

                              Código:
                              REPORT ztemp LINE-SIZE 255.
                              
                              ************************************************************************
                              * Definición de tipos
                              ************************************************************************
                              TYPES: BEGIN OF fichero,
                                       columna1 TYPE c,
                                       columna2 TYPE c,
                                     END OF fichero.
                              
                              DATA gt_fichero  TYPE TABLE OF fichero WITH HEADER LINE.
                              
                              ************************************************************************
                              * Definición de la pantalla de selección
                              ************************************************************************
                              SELECTION-SCREEN BEGIN OF BLOCK file WITH FRAME TITLE text-t01.
                                PARAMETERS p_file   TYPE fileintern       OBLIGATORY LOWER CASE.
                              SELECTION-SCREEN END OF BLOCK file.
                              
                              ************************************************************************
                              * Gestión de eventos de la pantalla de selección
                              ************************************************************************
                              AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
                              * Ayuda de búsqueda de nombre de fichero
                                CALL FUNCTION 'WS_FILENAME_GET'
                                     EXPORTING
                                          def_filename     = p_file
                                          def_path         = 'c:\'
                                          mask             = ',*.*,*.*.'
                                          mode             = 'O'
                                          title            = 'Ruta del fichero de carga'
                                     IMPORTING
                                          filename         = p_file
                                     EXCEPTIONS
                                          inv_winsys       = 1
                                          no_batch         = 2
                                          selection_cancel = 3
                                          selection_error  = 4
                                          OTHERS           = 5.
                              
                              START-OF-SELECTION.
                              * Lectura del fichero de carga
                                CALL FUNCTION 'FILE_READ_AND_CONVERT_SAP_DATA'
                                     EXPORTING
                                          i_filename           = p_file
                                          i_servertyp          = 'PRS'
                                          i_fileformat         = 'XLS'
                                     TABLES
                                          i_tab_receiver       = gt_fichero
                                     EXCEPTIONS
                                          file_not_found       = 1
                                          close_failed         = 2
                                          authorization_failed = 3
                                          open_failed          = 4
                                          conversion_failed    = 5
                                          OTHERS               = 6.
                              
                              END-OF-SELECTION.
                                LOOP AT gt_fichero.
                                  WRITE: / gt_fichero-columna1,
                                           gt_fichero-columna2.
                                ENDLOOP.
                              Ya nos contarás si te funciona

                              Comentario

                              Trabajando...