上传EXCEL和text到SAP内表 ,SAP内表导出EXCEL
相关文章:http://www.cnblogs.com/caizjian/p/3271757.html EXCEL
http://www.cnblogs.com/caizjian/archive/2013/04/12/3016284.html TXT
*&---------------------------------------------------------------------* *& Report ZTEST_UP_EXCEL *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZTEST_UP_EXCEL. TYPE-POOLS TRUXS. *定义内表 DATA:BEGIN OF gt_tab OCCURS 0, matnr TYPE matnr, "物料 maktx TYPE makt-maktx, "描述 date TYPE dats, "日期 END OF gt_tab. *传输的参数 DATA it_raw TYPE truxs_t_text_data. *定义输入框,也就是显示的路径 PARAMETERS p_file TYPE IBIPPARMS-PATH . *这个只用在批处理这边 后面要紧接着下面的上传文件弹出选择框的函数 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. *上传文件弹出选择框的函数 CALL FUNCTION 'F4_FILENAME' EXPORTING program_name = syst-cprog dynpro_number = syst-dynnr field_name = 'P_FILE' IMPORTING file_name = p_file. START-OF-SELECTION. CLEAR it_raw. *上传excel文件的函数 CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING " I_FIELD_SEPERATOR = 分隔符,默认为tab " I_LINE_HEADER = 'X' "X 表示取出表头 i_tab_raw_data = it_raw "传输的参数,没有实际用处 但是必输 i_filename = P_FILE "文件路径 TABLES i_tab_converted_data = gt_tab[] "导入到的内表 * EXCEPTIONS * CONVERSION_FAILED = 1 * OTHERS = 2 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. BREAK-POINT. *=====把内表导出成excel CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT' EXPORTING I_FIELD_SEPERATOR = ',' * I_LINE_HEADER = i_filename = P_FILE "导出路径 * I_APPL_KEEP = ' ' tables i_tab_sap_data = gt_tab[] "导出内表 * CHANGING * I_TAB_CONVERTED_DATA = it_raw * 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.
注意:
1. 导出的话最好把字段类型先全部转换成字符型
2、SAP_CONVERT_TO_XLS_FORMAT只能导出excel 不能导出txt
3、TEXT_CONVERT_XLS_TO_SAP 既可以导入txt也可以导入excel
4、TEXT_CONVERT_XLS_TO_SAP 导入excel或者txt的时候,金额或者含有小数类型的话 小于1的两位小数 导入到内表会被自动放大100倍 或者100倍,解决办法有两种
第一种是把excel中该单元格中的金额转换成文本型(txt类型没法改,只能用第二种方法),不是单元格转换成文本,而是值,转换后单元格左上右有绿色小三角;
第二种是把上传到的内表该字段定义为字符型,上传后再赋值给另外一张内表。