且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

ABAP用FILE_OPEN_DIALOG打开多个文件后打印出名称

更新时间:2022-08-16 19:48:33

  此实例将演示用CL_GUI_FRONTEND_SERVICES下的静态方法FILE_OPEN_DIALOG打开多个文件后打印出打开文件的名称。具体程式如下。

  DATA FILE_TABLE TYPE FILE_TABLE. "引用FILE_TABLE对象

  *SELECT-OPTIONS:i_file FOR FILE_TABLE NO INTERVALS.

  DATA: lt_file_names TYPE FILETABLE,
        lwa_file_name LIKE LINE OF lt_file_names,
        lv_subrc TYPE I.

  SELECT-OPTIONS: i_file FOR FILE_TABLE NO INTERVALS.

  AT SELECTION-SCREEN ON VALUE-REQUEST FOR i_file-low.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
      EXPORTING
  *    WINDOW_TITLE            =
  *    DEFAULT_EXTENSION     =
  *    DEFAULT_FILENAME        =
  *    FILE_FILTER             =
        INITIAL_DIRECTORY       = 'd:temp'
        MULTISELECTION          = 'X' 
      CHANGING
        file_table                      = lt_file_names[]
        rc                                 = lv_subrc  "打开文件的数量
  *    USER_ACTION             =
      EXCEPTIONS
        file_open_dialog_failed = 1
        cntl_error                        = 2
        error_no_gui                    = 3
        OTHERS                                 4.
    IF sy-subrc <> 0.
     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    i_file-sign = 'I'.
    i_file-option = 'EQ'.

    LOOP AT lt_file_names INTO lwa_file_name.
      i_file-low = lwa_file_name.
      APPEND i_file.
    ENDLOOP.

  START-OF-SELECTION.
    WRITE:'打开文件的数量:',lv_subrc LEFT-JUSTIFIED.
    LOOP AT i_file.
      WRITE: / i_file-low.
    ENDLOOP.
  程序运行如下:

  ABAP用FILE_OPEN_DIALOG打开多个文件后打印出名称
  以下代碼功能與上面的類似:
  

  "DATA FILE_TABLE TYPE FILE_TABLE. "引用FILE_TABLE对象
  *SELECT-OPTIONS:i_file FOR FILE_TABLE NO INTERVALS.

  DATA: lt_file_names TYPE FILETABLE,
        lwa_file_name LIKE LINE OF lt_file_names,
        lv_subrc TYPE I.
  DATA:BEGIN OF i_file_table OCCURS 0,
       i_file_name TYPE STRING,
       END OF i_file_table.
     
  DATA:my_file_table LIKE STANDARD TABLE OF i_file_table,
       my_wa_file_table LIKE LINE OF my_file_table.

  PARAMETERS: i_file LIKE FILE_TABLE OBLIGATORY LOWER CASE. "RLGRAP-FILENAME

  AT SELECTION-SCREEN ON VALUE-REQUEST FOR i_file.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
      EXPORTING
  *    WINDOW_TITLE            =
  *    DEFAULT_EXTENSION     =
  *    DEFAULT_FILENAME        =
  *    FILE_FILTER             =
        INITIAL_DIRECTORY       = 'd:temp'
        MULTISELECTION          = 'X'
      CHANGING
        file_table                      = lt_file_names[]
        rc                                 = lv_subrc  "打开文件的数量
  *    USER_ACTION             =
      EXCEPTIONS
        file_open_dialog_failed = 1
        cntl_error                        = 2
        error_no_gui                    = 3
        OTHERS                                 4.
    IF sy-subrc <> 0.
     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    READ TABLE lt_file_names INDEX INTO lwa_file_name.
    i_file = lwa_file_name.
    LOOP AT lt_file_names INTO lwa_file_name.
      "i_file_table-i_file_name = lwa_file_name.  "有表頭
      "APPEND i_file_table.
      my_wa_file_table-i_file_name = lwa_file_name.
      APPEND my_wa_file_table TO my_file_table.
      CLEAR my_wa_file_table.
    ENDLOOP.

  START-OF-SELECTION.

   IF my_file_table IS INITIAL.
        MESSAGE 'IMPORT FILES IS EMPTY' TYPE 'S'.
        EXIT.
    ENDIF.

    WRITE:'打开文件的数量:',lv_subrc LEFT-JUSTIFIED.
  *  LOOP AT i_file_table. "有表頭
  *    WRITE: / i_file_table-i_file_name.
  *  ENDLOOP.
    LOOP AT my_file_table INTO my_wa_file_table.
      WRITE: / my_wa_file_table-i_file_name.
    ENDLOOP.
  ABAP用FILE_OPEN_DIALOG打开多个文件后打印出名称