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


News