Você está na página 1de 5

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.


BLI
CA
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.


BLI
CA
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-POOLS: truxs.
*----------------------------------------------------------*
* Declarando tabela interna
*----------------------------------------------------------*
DATA: it_raw TYPE truxs_t_text_data.
*----------------------------------------------------------*
* Estrutura TYPES
*----------------------------------------------------------*
TYPES: BEGIN OF ty_arquivo,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
texto TYPE string,


BLI
CA
END OF ty_arquivo.
*----------------------------------------------------------*
* Tabela(s) Interna(s)
*----------------------------------------------------------*
DATA: gt_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
*----------------------------------------------------------*
DATA: lt_filetable TYPE filetable,
ls_filetable TYPE LINE OF filetable,
l_rc TYPE i.

CLEAR: ls_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.


BLI
CA
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.


BLI
CA

Você também pode gostar