数据文件的读取与写入
*相关函数
*WS_FILENAME_GET:读取文件路径对话框
*ALSM_EXCEL_TO_INTERNAL_TABLE:读取Excel文件数据到指定内表
*WS_UPLOAD:读取文本文件数据到指定内表
*WS_DOWNLOAD:将内表数据写入到文本文件
*WS_EXCEL:将内表数据写入到Excel文件
DATA:filename TYPE localfile,
filetype(10) TYPE c.
DATA:BEGIN OF record OCCURS 0,
col1(20),
col2(20),
col3(20),
col4(20),
col5(20),
END OF record.
DATA:forecast_itabt LIKE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE.
START-OF-SELECTION.
*调用函数打开文件对话框,MASK参数表示预设开启文件类型,若需要定义多个参数类型可采用
*MASK = ',*.txt,*.txt;,*dat,*dat;,*.xls,*,xls,*.'
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path = 'C:\EXAMPLE\DIR'
mask = ',*.*,*.*. '
mode = 'O '
title = 'Choose Input file '
IMPORTING
filename = filename
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
EXIT.
ENDIF.
**自定义子程序从字符串分拆文件类型
PERFORM getfiletype USING filename filetype.
IF filetype = 'XLS'.
*当为Excel类型时调用此参数,所抓取的文件数据在内表中为每个单元格为一行
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = filename
i_begin_col = 1
i_begin_row = 1
i_end_col = 5
i_end_row = 1000
TABLES
intern = forecast_itabt
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
**重新整理从Excel中抓取数据整理到所应用的内表
IF NOT forecast_itabt[] IS INITIAL.
LOOP AT forecast_itabt.
CASE forecast_itabt.
WHEN '0001'.
record-col1 = forecast_itabt-value.
WHEN '0002'.
record-col2 = forecast_itabt-value.
WHEN '0003'.
record-col3 = forecast_itabt-value.
WHEN '0004'.
record-col4 = forecast_itabt-value.
WHEN '0005'.
record-col5 = forecast_itabt-value.
ENDCASE.
**当表示某一行的数据读取完成时,在应用内表个字段填充值并新增一行,内表首行不做APPEND
ON CHANGE OF forecast_itabt-row.
IF sy-tabix <> 1.
APPEND record.
ENDIF.
ENDON.
ENDLOOP.
ENDIF.
**当为文本类型时调用此参数,所抓取的文件按制表位在内表填充
ELSEIF filetype = 'TXT' OR filetype = 'DAT'.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = filename
filetype = 'DAT'
TABLES
data_tab = record.
ELSE.
MESSAGE i001(00) WITH 'Not support this format files!'.
EXIT.
ENDIF.
**根据内表类型将表数据写入到本地文件
CONCATENATE 'C:\BACK\' sy-datum sy-uzeit '.' filetype INTO filename.