Télécharger une feuille Excel dans une table interne
Il arrive souvent que la lecture d’un fichier soit nécessaire, par exemple pour une reprise de données. On s’appuie habituellement sur un fichier .txt correctement formaté avec un séparateur de champs clairement défini (le point virgule par exemple). Cela nécessite généralement l’établissement d’un fichier .xls enregistré ensuite au format .csv.
La manipulation de ces fichiers étant fastidieuse, je vous propose ici un code capable de rapatrier un fichier excel dans une table interne.
La manipulation de ces fichiers étant fastidieuse, je vous propose ici un code capable de rapatrier un fichier excel dans une table interne.
- Code: Tout sélectionner
REPORT ZCHARG_XLS NO STANDARD PAGE HEADING LINE-SIZE 250.
***********************************************************************
* T A B L E S T R A N S P A R E N T E S *
***********************************************************************
DATA: BEGIN OF ITAB OCCURS 0,
COL_01(25) TYPE C,
COL_02(25) TYPE C,
COL_03(25) TYPE C,
COL_04(25) TYPE C,
COL_05(25) TYPE C,
COL_06(25) TYPE C,
COL_07(255) TYPE C,
COL_08(25) TYPE C,
COL_09(25) TYPE C,
COL_10(25) TYPE C,
END OF ITAB.
***********************************************************************
* E C R A N D E S E L E C T I O N *
***********************************************************************
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME OBLIGATORY.
***********************************************************************
* A T S E L E C T I O N S C R E E N O N V A L U E *
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
* ACTION SUR LA MATCHCODE DE P_FILE-->
* OUVERTURE DE LA POPUP 'GET FILENAME'
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
MASK = ',MULTICASH,*.XLS'
STATIC = 'X'
CHANGING
FILE_NAME = P_FILE
EXCEPTIONS
MASK_TOO_LONG = 1
OTHERS = 2.
IF SY-SUBRC > 0.
* ECHEC DE L'OUVERTURE DU FICHIER
MESSAGE ID '1S' TYPE 'E' NUMBER '409'.
ENDIF.
***********************************************************************
* A T S E L E C T I O N S C R E E N *
***********************************************************************
AT SELECTION-SCREEN ON P_FILE.
PERFORM CONTROLE_EXCEL.
***********************************************************************
* S T A R T O F S E L E C T I O N *
***********************************************************************
START-OF-SELECTION.
PERFORM CHARG_FIC TABLES ITAB USING P_FILE.
LOOP AT ITAB.
WRITE:/
ITAB-COL_01,
ITAB-COL_02,
ITAB-COL_03,
ITAB-COL_04,
ITAB-COL_05,
ITAB-COL_06,
ITAB-COL_07,
ITAB-COL_08,
ITAB-COL_09,
ITAB-COL_10.
ENDLOOP.
*&---------------------------------------------------------------------*
*& FORM CHARG_FIC
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->P_ITAB TEXT
* -->P_P_FILE TEXT
*----------------------------------------------------------------------*
FORM CHARG_FIC TABLES P_TABLE
USING P_FILE.
DATA : L_INTERN TYPE KCDE_CELLS OCCURS 0 WITH HEADER LINE.
DATA : L_INDEX TYPE I.
DATA : L_START_COL TYPE I VALUE '1'.
DATA : L_START_ROW TYPE I VALUE '1'.
DATA : L_END_COL TYPE I VALUE '256'.
DATA : L_END_ROW TYPE I VALUE '65536'.
FIELD-SYMBOLS : <FS>.
CLEAR P_TABLE.
REFRESH P_TABLE.
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
EXPORTING
FILENAME = P_FILE
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 = L_INTERN
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC > 0.
* ERREUR LORS OUVERTURE DU FICHIER & POUR LECTURE
MESSAGE ID '01' TYPE 'I' NUMBER '720'.
EXIT.
ENDIF.
IF L_INTERN[] IS INITIAL.
* LE FICHIER N'EXISTE PAS OU EST VIDE
MESSAGE ID 'FG' TYPE 'I' NUMBER '751'.
EXIT.
ELSE.
SORT L_INTERN BY ROW COL.
LOOP AT L_INTERN.
MOVE L_INTERN-COL TO L_INDEX.
ASSIGN COMPONENT L_INDEX OF STRUCTURE P_TABLE TO <FS>.
MOVE L_INTERN-VALUE TO <FS>.
AT END OF ROW.
APPEND P_TABLE.
CLEAR P_TABLE.
ENDAT.
ENDLOOP.
ENDIF.
ENDFORM. "CHARG_FIC
*&---------------------------------------------------------------------*
*& FORM CONTROLE_EXCEL
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM CONTROLE_EXCEL.
*CONTROLE QU'IL S'AGIT BIEN D'UN FICHIER EXCEL
DATA : W_EXT TYPE DSVASDOCID.
DATA : W_FILE TYPE DSVASDOCID.
W_FILE = P_FILE.
CALL FUNCTION 'DSVAS_DOC_FILENAME_SPLIT'
EXPORTING
PF_DOCID = W_FILE
IMPORTING
PF_EXTENSION = W_EXT.
TRANSLATE W_EXT TO UPPER CASE.
IF W_EXT <> 'XLS'.
* EXTENSION ERRONEE DU NOM DE FICHIER
MESSAGE ID 'SHDI' TYPE 'E' NUMBER '065'.
ENDIF.
ENDFORM. " CONTROLE_EXCEL