读取EXCEL文件到内表功能
FORM sub_excel_data.
"读取EXCEL文件到SAP内表
DATA : lt_dd03p TYPE TABLE OF dd03p WITH HEADER LINE.
DATA: lt_intern TYPE TABLE OF alsmex_tabline WITH HEADER LINE,
l_type.
DATA: ls_data TYPE REF TO data.
FIELD-SYBOLS: <ls_data>,
<comp>.
*获取内表列信息得到列数SY-TFILL
CREATE DATA ls_data LIKE LINE OF gt_excel.
ASSIGN ls_data->* TO <ls_data>. " 需要百度
CALL FUNCTION 'DDIF_TABL_GET' " DDIF_TABL_GET: 获得表的相关信息
" DDIF_TABL_PUT: 设置表的相关信息
" DDIF_TABL_GET: 激活透明表
EXPORTING
name = gc_struc
langu = sy-langu
TABLES
dd03p_tab = lt_dd03p
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
DELETE lt_dd03p WHERE fieldname(1) EQ '.'.
*得到列数
DESCRIBE TABLE lt_dd03p LINES sy-tfill.
”DESCRIBE TABLE 作用为 :判断内表itab的某些属性并把它们指定到指定的变量中。不同的选项是你能够判断表类型,当前字段行数和初始化需要的内存大小。
另外,系统字段sy-tfill和 sy-tleng 保存着当前表行数量 和 以字节计的表行长度。
lines 表示计算内表 lt_dd03p的行数,将行数放到sy-tfill里
sy-tfill = sy-tfill + 1.
* 读取EXCEL文件到内表
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = pa_path
i_begin_col = 2
i_begin_row = 10
i_end_col = sy-tfill
i_end_row = 65536
TABLES
intern = lt_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
others = 3.
IF sy-subrc <> 0.
MESSAGE e038(pc).
ENDIF.
“检查内表中的数据
LOOP AT lt_intern.
AT NEW row.
CLEAR <ls_data>.
ENDAT.
"分配字段到对象
ASSIGN COMPONENT lt_intern-col of structure <ls_data> to <comp>.
" 取得字段类型
DESCRIBE FIELD <comp> TYPE l_type.
CASE l_type.
"检查日期型
WHEN 'D' .
"检查是否为日期
CALL FUNCTION 'RP_01C_FORMAL_DATE_CHECK'
EXPORTING
i13_datum = lt_intern-value
EXCEPTIONS
no_date_input = 1
date_not_numeric = 2
invald_date = 3
OTHERS = 4.
IF sy-subrc <> 0.
lt_inern-row = lt_intern-row + 1.
MESSAGE ID 'UX' TYPE 'E' NUMBER '899'
WITH l_type lt_intern-value lt_intern-col
lt_intern-row.
ENDIF.
WHEN 'P'
"检查数字型
IF lt_intern-value CO '0123456790'