需求:将alv上面的数据计算到内表中区,然后通过自定义按钮进行下载到csv格式中附加:现在基本不用csv导出了,但是有些变态需求强行要求,也只好研究出来了,excel与txt导出很简单,那就不多说了。步骤:1.copy系统标准的SAP_CONVERT_TO_CSV_FORMAT函数,此函数已经使用不了,命名为ZSAP_CONVERT_TO_CSV_FORMAT,然后进行修改几处;a.系统标准的TRUXS_T_TEXT_DATA不存在,对于本机gui来说ZCSV_T为自己修改的类型,用于接收后面函数table里面的值FUNCTION ZSAP_CONVERT_TO_CSV_FORMAT.*"----------------------------------------------------------------------*"*"Local interface:*"  IMPORTING*"     VALUE(I_FIELD_SEPERATOR) TYPE  CHAR01 DEFAULT ';'*"     VALUE(I_LINE_HEADER) TYPE  CHAR01 OPTIONAL*"     VALUE(I_FILENAME) LIKE  RLGRAP-FILENAME OPTIONAL*"     VALUE(I_APPL_KEEP) TYPE  CHAR01 DEFAULT SPACE*"  TABLES*"      I_TAB_SAP_DATA TYPE  STANDARD TABLE*"  CHANGING*"     VALUE(I_TAB_CONVERTED_DATA) TYPE  ZCSV_T OPTIONAL*"  EXCEPTIONS*"      CONVERSION_FAILED*"----------------------------------------------------------------------  CONSTANTS: C_FIELD_SEPARATOR VALUE ','.  DATA:        L_START_STRING LIKE SY-FDPOS,        L_END_STRING LIKE SY-FDPOS,        L_LEN_STRING(6) TYPE N,        L_EOL_STRING LIKE SY-FDPOS,        L_START_TARGET_STRING LIKE SY-FDPOS,        L_END_TARGET_STRING LIKE SY-FDPOS,        L_LEN_TARGET_STRING(6) TYPE N,        L_EOL_TARGET_STRING LIKE SY-FDPOS,        L_CONV_DATA TYPE LINE OF ZCSV_T,        L_CSV_DATA TYPE LINE OF ZCSV_T.  CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'    EXPORTING      I_FIELD_SEPERATOR    = C_FIELD_SEPARATOR      I_LINE_HEADER        = I_LINE_HEADER      I_FILENAME           = I_FILENAME    TABLES      I_TAB_SAP_DATA       = I_TAB_SAP_DATA    CHANGING      I_TAB_CONVERTED_DATA = I_TAB_CONVERTED_DATA    EXCEPTIONS      CONVERSION_FAILED    = 4.  CHECK SY-SUBRC  0.*  if sy-subrc  c_rc0.  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4          RAISING CONVERSION_FAILED.*  endif.  DESCRIBE FIELD L_CSV_DATA LENGTH L_LEN_TARGET_STRING                                     in character mode.  DESCRIBE FIELD L_CONV_DATA LENGTH L_EOL_STRING                                     in character mode.  LOOP AT I_TAB_CONVERTED_DATA INTO L_CONV_DATA.    L_START_STRING = 1.    CLEAR: L_CSV_DATA,           L_START_TARGET_STRING,           L_END_TARGET_STRING.    DO.      SEARCH L_CONV_DATA FOR C_FIELD_SEPARATOR STARTING AT                                                  L_START_STRING                                                  ENDING AT                                                  L_EOL_STRING.      IF SY-SUBRC  0.        EXIT.      ENDIF.      IF SY-SUBRC = 0.        L_END_STRING = L_START_STRING + SY-FDPOS.        L_LEN_STRING = L_END_STRING - L_START_STRING + 1.        L_START_STRING = L_START_STRING - 1.        L_END_TARGET_STRING = L_END_TARGET_STRING + L_LEN_STRING + 4.        IF L_END_TARGET_STRING .          L_CSV_DATA+L_START_TARGET_STRING(3) = '"""'.          L_START_TARGET_STRING = L_START_TARGET_STRING + 3.          L_CSV_DATA+L_START_TARGET_STRING(L_LEN_STRING) =                                      L_CONV_DATA+L_START_STRING.          L_START_TARGET_STRING = L_START_TARGET_STRING + L_LEN_STRING                                                        - 1.          L_CSV_DATA+L_START_TARGET_STRING(1) = '"'.          L_START_TARGET_STRING = L_START_TARGET_STRING + 1.          L_CSV_DATA+L_START_TARGET_STRING(1) = ';'.          L_END_TARGET_STRING = STRLEN( L_CSV_DATA ).          L_START_TARGET_STRING = L_END_TARGET_STRING.          L_START_STRING = L_END_STRING + 1.        ELSE.          EXIT.        ENDIF.      ENDIF.    ENDDO.    MODIFY I_TAB_CONVERTED_DATA FROM L_CSV_DATA.  ENDLOOP.ENDFUNCTION.2.下面为调用类的方法,为弹出框选择路径、将内表数据通过copy的函数用逗号分隔封装到另一内表中和下载csv文件。  DATA: truxs_t_text_data(4096) TYPE c OCCURS 0.  DATA: it_tabout LIKE truxs_t_text_data.CALL METHOD cl_gui_frontend_services=>file_save_dialog    EXPORTING      default_extension    = 'CSV'      default_file_name    = '*'      file_filter          = 'CSV文件(*.CSV)'    CHANGING      filename             = w_filename      path                 = w_file_path      fullpath             = w_full_path    EXCEPTIONS      cntl_error           = 1      error_no_gui         = 2      not_supported_by_gui = 3      OTHERS               = 4.  IF sy-subrc  0.    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  ENDIF.  CLEAR it_tabout.  CALL FUNCTION 'ZSAP_CONVERT_TO_CSV_FORMAT'*  EXPORTING*    I_FIELD_SEPERATOR    = ';'*   I_LINE_HEADER        =*   I_FILENAME           =*   I_APPL_KEEP          = ' '    TABLES      i_tab_sap_data       = lt_worldship    CHANGING      i_tab_converted_data = it_tabout    EXCEPTIONS      conversion_failed    = 1      OTHERS               = 2.  IF sy-subrc = 0.  ENDIF.  CALL METHOD cl_gui_frontend_services=>gui_download              EXPORTING*                 bin_filesize            =                filename                = w_filename**                filetype                = 'DAT'*                 codepage                = '8404'*                 ignore_cerr             = ABAP_TRUE*                 replacement             = '#'              CHANGING                data_tab                = it_tabout              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.    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  ENDIF.
12-21 17:35