入参 | ||
IS_DATA | ||
OBJ_ID | CHAR | SAP WWW 网关对象名 |
DEFAULT_FILE_NAME | STRING | Default Extension |
DEFAULT_EXTENSION | STRING | Default File Name |
FILE_FILTER | STRING | |
FILENAME | STRING | 下载文件地址 |
IT_CELL | ||
ROW | INT4 | 行号 |
COLUMN | INT4 | 列号 |
VALUE | STRING | 单元格填充值 |
ABAP_TYPE | CHAR | 数据类型 |
出参ES_RETURN | ||
MSGTS | CHAR | 消息类型 |
MSG | CHAR | 消息文本 |
METHOD edit_excel.
DATA ls_key TYPE wwwdatatab.
DATA lt_mime TYPE TABLE OF w3mime.
DATA lv_xstring TYPE xstring.
DATA lo_reader TYPE REF TO zif_excel_reader.
DATA lo_excel_writer TYPE REF TO zif_excel_writer.
DATA lo_worksheet TYPE REF TO zcl_excel_worksheet.
DATA lv_file TYPE xstring.
DATA lv_bytecount TYPE i.
DATA lt_file_tab TYPE solix_tab.
SELECT SINGLE a~relid,a~objid,b~value
FROM wwwdata AS a
LEFT JOIN wwwparams AS b ON a~relid = b~relid
AND a~objid = b~objid
AND b~name EQ 'filesize'
WHERE a~srtf2 = 0
AND a~relid = 'MI'
AND a~objid = @is_data-obj_id
INTO @DATA(ls_tempt).
IF sy-subrc <> 0 .
es_return = VALUE #( msg = '模板不存在,请使用SMW0上传'(001) msgts = 'E' ).
EXIT.
ENDIF.
ls_key = VALUE #( relid = ls_tempt-relid objid = ls_tempt-objid ).
CALL FUNCTION 'WWWDATA_IMPORT'
EXPORTING
key = ls_key
TABLES
mime = lt_mime
EXCEPTIONS
wrong_object_type = 1
import_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = CONV i( ls_tempt-value )
IMPORTING
buffer = lv_xstring
TABLES
binary_tab = lt_mime
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CHECK lv_xstring IS NOT INITIAL.
CREATE OBJECT lo_reader TYPE zcl_excel_reader_2007.
DATA(lo_excel) = lo_reader->load( i_excel2007 = lv_xstring ).
lo_worksheet = lo_excel->get_active_worksheet( ).
DATA(lt_cell) = it_cell.
SORT lt_cell BY row column.
DELETE ADJACENT DUPLICATES FROM lt_cell COMPARING row column.
LOOP AT lt_cell INTO DATA(ls_cell).
lo_worksheet->set_cell( ip_column = ls_cell-column ip_row = ls_cell-row ip_value = ls_cell-value
ip_abap_type = COND #( WHEN ls_cell-abap_type IS NOT INITIAL THEN ls_cell-abap_type ELSE cl_abap_typedescr=>typekind_string ) ).
ENDLOOP.
CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007.
lv_file = lo_excel_writer->write_file( lo_excel ).
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_file
IMPORTING
output_length = lv_bytecount
TABLES
binary_tab = lt_file_tab.
cl_gui_frontend_services=>gui_download(
EXPORTING
bin_filesize = lv_bytecount
filename = is_data-filename
filetype = 'BIN'
CHANGING
data_tab = lt_file_tab
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
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24 ).
IF sy-subrc <> 0.
es_return-msgts = 'E'.
ENDIF.
ENDMETHOD.