EXCEL 导入方式一
说明: 读取的数据直接在内表 IT_SPFLI 内,样式和EXCEL一样
DATA : P_PATH TYPE STRING.
DATA: IT_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE,
MUL_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.
DATA: L_RC TYPE I,
L_FILE_TABLE TYPE FILETABLE ,
WA_FILE TYPE LINE OF FILETABLE.
type-POOLS:TRUXS.
DATA LT_RAW type TRUXS_T_TEXT_DATA .
START-OF-SELECTION.
*--------------------------------------------------------------------* 获取文件路径
call METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
DEFAULT_EXTENSION = '文本文件 (*.txt)|*.txt|全部文件 (*.*)|*.*|'
DEFAULT_FILENAME = P_PATH
CHANGING
FILE_TABLE = L_FILE_TABLE
rc = L_RC.
LOOP AT L_FILE_TABLE INTO WA_FILE.
L_PATH = WA_FILE-FILENAME.
ENDLOOP.
读取数据
data:L_file like RLGRAP-FILENAME.
l_file = l_path.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR = 'X' "有没有表头,X 表示有
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = LT_RAW
I_FILENAME = L_file
TABLES
I_TAB_CONVERTED_DATA = IT_SPFLI
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
EXCEL 导入方式二
说明: 读取的数据在内表 IT_ lt_ALS 内, 数据需要处理转换成需要的样式,内表IT_ lt_ALS 分为行EXCEL 的行、EXCEl的列 和数据列三个列
DATA: lt_als LIKE TABLE OF alsmex_tabline WITH HEADER LINE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'LV_FILE'
IMPORTING
file_name = lv_file.
CHECK lv_file IS NOT INITIAL.
* CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
* EXPORTING
* i_line_header = 'X' "标识导入的表有标题行,去掉首行
* i_tab_raw_data = lt_raw " WORK TABLE
* i_filename = lv_file "文件路径
* TABLES
* i_tab_converted_data = lt_xls[] "ACTUAL DATA 接收数据的内表
* EXCEPTIONS
* conversion_failed = 1
* OTHERS = 2.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = lv_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 12
i_end_row = 9999
TABLES
intern = lt_als.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF lt_als[] IS INITIAL.
MESSAGE e019.
ELSE.
CLEAR: i_zepldtl, i_zepldtl[].
LOOP AT lt_als.
lv_idx = lt_als-col.
ASSIGN COMPONENT lv_idx OF STRUCTURE lt_xls TO <fs1>.
<fs1> = lt_als-value.
AT END OF row.
APPEND lt_xls.
CLEAR lt_xls.
ENDAT.
ENDLOOP.
LOOP AT lt_xls.
lv_posnr = sy-tabix.
CLEAR i_zepldtl.
MOVE-CORRESPONDING lt_xls TO i_zepldtl.
PERFORM frm_add_zero_yb CHANGING i_zepldtl-matnr.
i_zepldtl-posnr = lv_posnr.
APPEND i_zepldtl.
ENDLOOP.
CALL SCREEN 9001.
ENDIF.
ENDIF.
text 文本导入
说明: 本列是LOOP循环中一次导出多个EXCEL,如果不需要,去掉LOOP循环
DATA : L_PATH TYPE STRING,
N_1 TYPE N,
P_PATH TYPE STRING.
DATA: IT_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE,
MUL_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.
DATA: L_RC TYPE I,
L_FILE_TABLE TYPE FILETABLE ,
WA_FILE TYPE LINE OF FILETABLE.
type-POOLS:TRUXS.
DATA LT_RAW type TRUXS_T_TEXT_DATA .
call METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
DEFAULT_EXTENSION = '文本文件 (*.txt)|*.txt|全部文件 (*.*)|*.*|'
DEFAULT_FILENAME = P_PATH
CHANGING
FILE_TABLE = L_FILE_TABLE
rc = L_RC.
LOOP AT L_FILE_TABLE INTO WA_FILE.
L_PATH = WA_FILE-FILENAME.
ENDLOOP.
2. 数据传输到内表
find '.txt' in L_PATH.
*--------------------------------------------------------------------* 获取 TEXt 上载文件
IF sy-subrc = 0.
CAiaoLL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_PATH
* FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* ISDOWNLOAD = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
DATA_TAB = IT_SPFLI
* CHANGING
* ISSCANPERFORMED = ' '
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_READ_ERROR = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* NO_AUTHORITY = 6
* UNKNOWN_ERROR = 7
* BAD_DATA_FORMAT = 8
* HEADER_NOT_ALLOWED = 9
* SEPARATOR_NOT_ALLOWED = 10
* HEADER_TOO_LONG = 11
* UNKNOWN_DP_ERROR = 12
* ACCESS_DENIED = 13
* DP_OUT_OF_MEMORY = 14
* DISK_FULL = 15
* DP_TIMEOUT = 16
* OTHERS = 17
EXCEL 导出程序
1. 获取保存路径 (也可以使用类中方法:FILE_SAVE_DIALOG)
DATA : L_PATH TYPE STRING.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
CHANGING
SELECTED_FOLDER = L_PATH.
*--------------------------------------------------------------------* EXCEL 文件下载
N_1 = 0.
LOOP AT IT_SPFLI .
MUL_SPFLI = IT_SPFLI.
APPEND MUL_SPFLI.
N_1 = N_1 + 1.
CONCATENATE L_PATH '\' SY-DATUM '-' N_1 '.XLS' INTO P_PATH.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
FILENAME = L_PATH
FILETYPE = 'DAT'
* APPEND = ' '
WRITE_FIELD_SEPARATOR = 'X'
* HEADER = '00'
TRUNC_TRAILING_BLANKS = 'X'
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = ABAP_TRUE
* VIRUS_SCAN_PROFILE = '/SCET/GUI_DOWNLOAD'
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = MUL_SPFLI[]
* FIELDNAMES =
* 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
.
ENDLOOP.
IF SY-SUBRC <> 0.
MESSAGE S999(sa) with 'ok'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.