保存文件(以TAB鍵隔開列的文件)

標準程序保存文件到EXCEL總會出現一些前導顯示格式不對,去掉了前導0或者用一串數字字符串顯示成科學計數,

很不方便,所以今天有空用函數GUI_DOWNLOAD 轉換一下格式保存文件。

 

保存文件代碼 如下:

(1)調用FORM保存文件: PERFORM SAVE_DATA  TABLES   ITAB. "ITAB不需要指定結構的內表
(2)保存文件代碼

 FORM SAVE_DATA  TABLES   P_ITAB.
  DATA: FRM_TAB_STR VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
  DATA: FRM_IT_SAVE_DATA TYPE STRING OCCURS 0 WITH HEADER LINE.
  DATA: FRM_ITAB_COMPONET TYPE REF TO CL_ABAP_STRUCTDESCR.
  DATA: FRM_FIELDLENGTH TYPE I.
  DATA: FRM_FILENAME TYPE STRING,
        FRM_FILEPATH TYPE STRING,
        FRM_FILEFPATH TYPE STRING.

  FIELD-SYMBOLS: <FRM_WA>,<FRM_FIELD>,<FRM_WA_COMPONENT>.

  "打開保存文件對話框
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
      WINDOW_TITLE         = '保存文件'
      FILE_FILTER             = 'EXCEL 文件 (*.xls)|*.XLS|文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*|'
    CHANGING
      FILENAME             = FRM_FILENAME
      PATH                 = FRM_FILEPATH
      FULLPATH             = FRM_FILEFPATH
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.

  IF FRM_FILENAME IS INITIAL.
    RETURN.
  ENDIF.

  REFRESH FRM_IT_SAVE_DATA.

  FRM_ITAB_COMPONET ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( P_ITAB ).

  LOOP AT P_ITAB ASSIGNING <FRM_WA>.
    CLEAR FRM_IT_SAVE_DATA.
    LOOP AT FRM_ITAB_COMPONET->COMPONENTS ASSIGNING <FRM_WA_COMPONENT>.
      ASSIGN COMPONENT SY-TABIX OF STRUCTURE <FRM_WA> TO <FRM_FIELD>.
      IF SY-TABIX EQ 1.
        FRM_IT_SAVE_DATA = <FRM_FIELD>.
      ELSE.
        CONCATENATE FRM_IT_SAVE_DATA FRM_TAB_STR <FRM_FIELD> INTO FRM_IT_SAVE_DATA.
      ENDIF.
    ENDLOOP.
    CONDENSE FRM_IT_SAVE_DATA.
    APPEND FRM_IT_SAVE_DATA.
  ENDLOOP.


  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      FILENAME                = FRM_FILENAME
      FILETYPE                = 'ASC'
    TABLES
      DATA_TAB                = FRM_IT_SAVE_DATA
    EXCEPTIONS
      FILE_WRITE_ERROR        = 1
      NO_BATCH                = 2
      GUI_REFUSE_FILETRANSFER = 3
      INVALID_TYPE            = 4
      NO_AUTHORITY            = 5
      UNKNOWN_ERROR           = 6
      HEADER_NOT_ALLOWED      = 7
      SEPARATOR_NOT_ALLOWED   = 8
      FILESIZE_NOT_ALLOWED    = 9
      HEADER_TOO_LONG         = 10
      DP_ERROR_CREATE         = 11
      DP_ERROR_SEND           = 12
      DP_ERROR_WRITE          = 13
      UNKNOWN_DP_ERROR        = 14
      ACCESS_DENIED           = 15
      DP_OUT_OF_MEMORY        = 16
      DISK_FULL               = 17
      DP_TIMEOUT              = 18
      FILE_NOT_FOUND          = 19
      DATAPROVIDER_EXCEPTION  = 20
      CONTROL_FLUSH_ERROR     = 21
      OTHERS                  = 22.

  IF SY-SUBRC EQ 0.
    MESSAGE I001(00WITH '文件已保存'.
  ENDIF.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章