使用 abap2xlsx 给SMW0上传的模版填充值

入参

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.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值