一、当上传的CSV文件是用逗号分隔时FM, TEXT_CONVERT_CSV_TO_SAP中指定分隔符不起作用, 下面的代码通过一个convert subroutine 将itab中的分隔符手工处理下, 再给这个FM用.
REPORT ztr0010.
TYPE-POOLS: abap.
CONSTANTS: c_separator VALUE ',',
c_replacer VALUE ';'.
DATA: v_source(255) VALUE '2000,"200,5","a""b"'.
PERFORM convert USING v_source.
WRITE v_source.
FORM convert CHANGING p_source.
DATA: lv_len TYPE i,
lv_c(1).
DATA: lv_flag TYPE abap_bool VALUE abap_true.
lv_len = STRLEN( p_source ).
DO lv_len TIMES.
lv_c = p_source+sy-index(1).
IF lv_c = '"'.
IF lv_flag = abap_true.
lv_flag = abap_false.
ELSE.
lv_flag = abap_true.
ENDIF.
ENDIF.
IF lv_flag = abap_true AND lv_c = c_separator.
p_source+sy-index(1) = c_replacer.
ENDIF.
ENDDO.
ENDFORM.
二、 生成CSV文件时, 如果想让分隔符不是逗号, 可以参考下面的代码
REPORT ztr0009.
TYPE-POOLS:truxs.
DATA: BEGIN OF itab OCCURS 0,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
END OF itab.
DATA:itab1 TYPE truxs_t_text_data,
wa_itab1 LIKE LINE OF itab1.
SELECT vbeln posnr INTO TABLE itab FROM vbap UP TO 10 ROWS.
CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
EXPORTING
i_field_seperator = ';'
TABLES
i_tab_sap_data = itab
CHANGING
i_tab_converted_data = itab1
EXCEPTIONS
conversion_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.
LOOP AT itab1 INTO wa_itab1.
TRANSLATE wa_itab1 USING ';,'.
MODIFY itab1 FROM wa_itab1 INDEX sy-tabix.
ENDLOOP.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:\TEMP\test.csv'
TABLES
data_tab = itab1
EXCEPTIONS
OTHERS = 1.