上传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类型没法改,只能用第二种方法),不是单元格转换成文本,而是值,转换后单元格左上右有绿色小三角;
第二种是把上传到的内表该字段定义为字符型,上传后再赋值给另外一张内表。

原文地址:https://www.cnblogs.com/caizjian/p/3016192.html