Télécharger une feuille Excel dans une table interne

Télécharger une feuille Excel dans une table interne

Messagede ghosteur » 03 Février 2010, 09:54

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.

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
ghosteur
Posteur débutant
Posteur débutant
 
Messages: 8
Inscription: 01 Février 2010, 11:12

Retourner vers ABAP

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités