Importar arquivo do Excel em ABAP


Falaaaa galerinha da Fox,
Hoje vou dá um help em importação de arquivo do Excel para o mundo SAP \o//

Lembrando que o exemplo que vou postar é modelo bem simples, porém muito útil.
Importar e Exportar arquivos do Excel é uma das tarefas mais comuns de se ver em qualquer linguagem de programação, então eu não poderia deixar o ABAP de fora dessa ;)

Mão na massa!

Primeiro vamos declarar TRUXS como TYPES-POOLS.


Depois vamos criar uma estrutura interna com base nos campos que serão importados, em seguida declare uma tabela com base na estrutura criada.


Vamos também criar um parâmetro simples, apenas para receber o arquivo que será importado.
Na sequência chamamos o evento AT SELECTION-SCREEN que é capaz de manipular as ações do sistema e do usuário no momento em que se deseja fazer uma alteração ou exibição de seleção em um report.

Agora, antes da declaração do START-OF-SELECTION, vamos criar um PERFORM para buscar/procurar o arquivo em nosso diretório local. Para isso vamos utilizar o método cl_gui_frontend_services=>file_open_dialog e passar uma tabela interna do tipo FILETABLE.


Finalizando nosso código, vamos chamar a função: TEXT_CONVERT_XLS_TO_SAP que irá converter o arquivo importado, para um tipo texto, manipulável pela linguagem ABAP.
 Na função iremos passar como parâmetro um char 'X' para i_line_header, nossa tabela do tipo truxs_t_text_data para i_tab_raw_data e por último nossa tabela interna que vai receber os dados importados.


Prontinho, ative e F8 \o/
Pressione F4 ou clique no matchcode ao lado direito para chamar o popup.


Informe o arquivo Excel que deseja importar e clique em ABRIR.


Pressione F8.
Caso seu arquivo seja da versão mais nova do Excel "XLSX" irá aparecer essa mensagem. Tenha certeza que escolheu o arquivo correto e confirme.


Em modo Debug, é possível visualizar que a nossa tabela de entrada é populada com base no arquivo importado. Coloquei um ponto de parada no momento exato para facilitar a compreensão do que estou falando.


Clicando sobre a tabela. Lá estão todos os dados importados do arquivo do Excel.


E é só isso. Bem simples. Lembrando que existe N outras formas de fazer esse mesmo procedimento, inclusive outras mais cabulosas para arquivos mais complexos, mas isso fica para um próximo post \o///
Segue o código utilizado no tutorial, bons estudos!

*----------------------------------------------------------*
* Declarando TYPE-POOLS
*----------------------------------------------------------*

TYPE-POOLStruxs.
*----------------------------------------------------------*
* Declarando tabela interna
*----------------------------------------------------------*

DATAit_raw TYPE truxs_t_text_data.
*----------------------------------------------------------*
* Estrutura TYPES
*----------------------------------------------------------*

TYPESBEGIN OF ty_arquivo,
         matnr TYPE mara-matnr,
         ersda TYPE mara-ersda,
         texto TYPE string,
       END OF ty_arquivo.
*----------------------------------------------------------*
* Tabela(s) Interna(s)
*----------------------------------------------------------*

DATAgt_entrada TYPE TABLE OF ty_arquivo.
*----------------------------------------------------------*
* Seleção de arquivo
*----------------------------------------------------------*

PARAMETER p_file TYPE rlgrap-filename.
*----------------------------------------------------------*
* Evento que irá manipular ações do usuário ao pressionar F4
*----------------------------------------------------------*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  PERFORM f_busca_arquivo.
*----------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------*
PERFORM f_upload.
*----------------------------------------------------------*
* Chamando método que irá buscar o arquivo no diretério local
*----------------------------------------------------------*

FORM f_busca_arquivo.
*----------------------------------------------------------*
* Declarando tabelas e wa para trabalhar com File Open Dialog
*----------------------------------------------------------*

  DATAlt_filetable TYPE         filetable,
        ls_filetable TYPE LINE OF filetable,
        l_rc         TYPE i.

  CLEARls_filetable.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            'Selecione o arquivo para Upload'
      default_extension       'XLSX'
      file_filter             'Arquivos do Excel (*.XLS)|*.XLS| Excel files (*.XLSX)|*.XLSX|'
*     initial_directory       = desktop_directory  " Definir um local específico para procurar o arquivo
    CHANGING
      file_table              lt_filetable
      rc                      l_rc
    EXCEPTIONS
      file_open_dialog_failed 1
      cntl_error              2
      error_no_gui            3
      not_supported_by_gui    4
      OTHERS                  5.

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
* Identifica o arquivo selecionado e joga para o parametro de seleção     READ TABLE lt_filetable INTO ls_filetable INDEX 1.
    p_file ls_filetable-filename.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  F_UPLOAD
*&---------------------------------------------------------------------*
*       Fazendo upload do arquivo importado para ser tratado internamente
*----------------------------------------------------------------------*

FORM f_upload .   CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_line_header        'X'
      i_tab_raw_data       it_raw            " WORK TABLE
      i_filename           p_file
    TABLES
      i_tab_converted_data gt_entrada  " TABELA INTERNA
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.




Gostou da publicação? Então clica na raposinha e curta nossa fanpage \o/


Quer aprender ABAP definitivamente, sem precisar sair de casa?

Acessewww.abapfox.org


“O sucesso é a soma de pequenos esforços repetidos dia após dia” – Robert Collier

3 comentários:

  1. Estou tentando importar uma planilha Excel XLS e xlsx no SAP HCM com dados de fornecedores e o sistema aponta um erro: " O arquivo encontra se vazio".
    O São nunca deu este problema. Para conseguirmos subir, precisamos transformar o campo CPF no formato número e nunca deixar em texto, excluir as linhas que não tem cadastro e somente até 280 linhas de cadastro, sendo que antes poderíamos carregar até 680 registros massivamente.
    Podem informar o que pode ter ocorrido? Alguma atualização no OFfice pode ter influenciado ou e incompativel com o Sap?
    O que pode se feito no ABAP?
    Muito obrigada!

    ResponderExcluir
    Respostas
    1. Então seria legal debugar para verificar se o programa abap está fazendo alguma verificação ou procedimento após o upload do arquivo.
      Mas sem debugar fica difícil dizer qual poderia ser o problema. Acredite no debug!!

      Excluir
  2. Teria uma versão desse programa importando o XLSX do servidor de aplicação?

    ResponderExcluir

Copyright © 2013 ABAP SAP - AbapFox! Aprenda ABAP Definitivamente