ABAP创建EXCEL上传SAP服务器AL11
使用方式:
-
将数据拼接成STRING,
-
使用函数SCMS_STRING_TO_XSTRING将数据从string转为Xstring;
-
使用函数SCMS_XSTRING_TO_BINARY将XSTRING转换为二进制数据;
-
在应用服务器中打开文件OPEN DATASET
[options]此句打开文件。如果不指定任何模式选项,则文件将按二进制模式打开。如果系统不能打开文件,则将系统字段SY-SUBRC设置为8,否则SY-SUBRC返回0。 -
打开文件读取OPEN DATASET LV_FOLDER FOR OUTPUT IN BINARY MODE.
-
关闭应用服务器上的文件 CLOSE DATASET .
-
AL11查看上传的文件;

REPORT ZQZTEST007.
TABLES: RLGRAP.
TYPES: BEGIN OF TY_FILE,
LINE(1024) TYPE X,
END OF TY_FILE.
DATA: GT_FILE TYPE TABLE OF TY_FILE.
DATA: GV_FILE_NAME TYPE SDBAH-ACTID,
GV_FILE_TYPE TYPE SDBAD-FUNCT,
GV_FILE TYPE XSTRING.
DATA: BEGIN OF LS_DATA,
LINE TYPE STRING,
END OF LS_DATA.
DATA: LT_DATA LIKE TABLE OF LS_DATA.
DATA: LV_LABST TYPE STRING.
START-OF-SELECTION.
"读取数据
PERFORM FRM_READ_UPLOAD_FILE.
"上传文件至SAP服务器
PERFORM FRM_UPLOAD_FILE_TO_SAP.
CL_DEMO_OUTPUT=>WRITE( '1' ).
CL_DEMO_OUTPUT=>WRITE( '2' ).
CL_DEMO_OUTPUT=>DISPLAY( ).
END-OF-SELECTION.
FORM FRM_READ_UPLOAD_FILE .
SELECT A~WERKS, AMATNR,ALGORT, A~LABST, B~ZTDLINE
INTO TABLE @DATA(LT_MARD)
FROM MARD AS A
JOIN MARA AS B ON A~MATNR = B~MATNR
WHERE A~WERKS = ‘1000’
AND A~LABST > 0.
CONCATENATE ‘工厂’ ‘物料号码’
‘存储地点’ ‘库存数量’ ‘描述’
INTO LS_DATA-LINE
SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
APPEND LS_DATA TO LT_DATA .
LOOP AT LT_MARD INTO DATA(LS_MARD).
CLEAR: LV_LABST.
LV_LABST = LS_MARD-LABST.
CLEAR: LS_DATA.
CONCATENATE LS_MARD-WERKS
LS_MARD-MATNR
LS_MARD-LGORT
LV_LABST
LS_MARD-ZTDLINE
INTO LS_DATA-LINE
SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
APPEND LS_DATA TO LT_DATA .
ENDLOOP.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_UPLOAD_FILE_TO_SAP
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM FRM_UPLOAD_FILE_TO_SAP .
DATA: LS_FILE TYPE TY_FILE.
DATA: LV_FOLDER TYPE EPS2FILNAM.
DATA: LV_XTR TYPE XSTRING,
GV_STR TYPE STRING.
"指定目录和文件名
GV_FILE_NAME = ‘库存数据’.
GV_FILE_TYPE = ‘xlsx’.
LV_FOLDER = ‘/usr/sap/tmp/’ && GV_FILE_NAME && ‘.’ && GV_FILE_TYPE.
LOOP AT LT_DATA INTO ls_DATA.
"向应用服务器上文件上写入数据
"TRANSFER ls_DATA-LINE TO lv_folder.
IF GV_STR IS INITIAL.
GV_STR = ls_DATA-LINE.
ELSE.
GV_STR = GV_STR && CL_ABAP_CHAR_UTILITIES=>CR_LF && ls_DATA-LINE.
ENDIF.
ENDLOOP.
-
SRING类型转换为16进制
CALL FUNCTION ‘SCMS_STRING_TO_XSTRING’
EXPORTING
TEXT = GV_STR -
MIMETYPE = ' ' -
ENCODING =IMPORTING
BUFFER = LV_XTR
EXCEPTIONS
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.
TYPES:
BEGIN OF XML_LINE,
DATA(512) TYPE X,
END OF XML_LINE.DATA:LS_BINARY TYPE XML_LINE,
LT_BINARY TYPE STANDARD TABLE OF XML_LINE,
LT_LIST TYPE STANDARD TABLE OF EPSFILI.
DATA:LV_LENGTH TYPE I.CALL FUNCTION ‘SCMS_XSTRING_TO_BINARY’
EXPORTING
BUFFER = LV_XTR -
APPEND_TO_TABLE = ' 'IMPORTING
OUTPUT_LENGTH = LV_LENGTH
TABLES
BINARY_TAB = LT_BINARY."在应用服务器打开文件(二进制模式)
OPEN DATASET LV_FOLDER FOR OUTPUT IN BINARY MODE.IF SY-SUBRC = 0.
LOOP AT LT_BINARY INTO LS_BINARY.
TRANSFER LS_BINARY-DATA TO LV_FOLDER.
ENDLOOP."关闭应用服务器文件
CLOSE DATASET LV_FOLDER.MESSAGE S000(ZMM) WITH ‘写入文件成功’ DISPLAY LIKE ‘S’.
LEAVE LIST-PROCESSING.
ELSE.
MESSAGE S000(ZMM) WITH ‘在应用服务器打开文件失败’ DISPLAY LIKE ‘E’.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.









