Visualizzazione post con etichetta file. Mostra tutti i post
Visualizzazione post con etichetta file. Mostra tutti i post

martedì 4 agosto 2009

Selezionare file locale

DATA: tb_path_in TYPE file_table OCCURS 0,
wa_path TYPE file_table.
DATA: in_str TYPE string.
CLEAR tb_path_in.

CALL METHOD cl_gui_frontend_services=>file_open_dialog
* EXPORTING
* WINDOW_TITLE =
* DEFAULT_EXTENSION =
* DEFAULT_FILENAME =
* FILE_FILTER =
* INITIAL_DIRECTORY =
* MULTISELECTION =
* WITH_ENCODING =
CHANGING
file_table = tb_path_in
rc = rc.

READ TABLE tb_path_in INDEX 1 INTO wa_path.
MOVE wa_path-filename TO p_in.
MOVE wa_path-filename TO in_str.

giovedì 23 luglio 2009

Importare un file xls in una tabella interna

Per porter importare un file excel in una tabella interna è possibile utilizzare la seguente funzione:

DATA
: tb_excel TYPE alsmex_tabline OCCURS 0.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 2
i_begin_row = 3
i_end_col = 6
i_end_row = 10000
TABLES
intern = tb_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.


E' necessario dichiarare l'area in cui si trovano i dati.
Una volta eseguita la funzone verrà valorizzata la tabella tb_excel . Questa tabella ha una riga per ogni cella letta nel file xls.
La riga della tabella è strutturata con 3 valori: riga, colonna e valore.

Per porter splittare i dati nel modo corretto è possibile usare questo semplice loop:

FIELD-SYMBOLS (c) TYPE any.

LOOP AT tb_excel INTO wa_excel.
ASSIGN COMPONENT wa_excel-col OF STRUCTURE wa_xls TO (c) .
IF sy-subrc = 0.
MOVE wa_excel-value TO (c).
ENDIF.
AT END OF row.
APPEND wa_xls TO tb_xls.
CLEAR wa_xls.
ENDAT.
ENDLOOP.


L'oggetto tb_xls è la tabella che identifica correttamente una riga del nostro xls. Nel mio caso particolare la struttura era formata da :

DATA: BEGIN OF tb_xls OCCURS 0.
DATA: kunnr TYPE kunnr,
zkprot TYPE zkprot,
zkddef(10),
barcode TYPE bds_bar_in-barcode,
tipo .
DATA: END OF tb_xls.