标准程序保存文件到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(00) WITH '文件已保存'.
ENDIF.