美文网首页
ABAP报表数据处理:本地文件upload &&

ABAP报表数据处理:本地文件upload &&

作者: hitammy | 来源:发表于2016-12-01 16:22 被阅读648次

无论是upload还是download,首先要确定文件的路径和名字。再将文件数据upload到内表或是将内表数据download到本地文件。

一、 打开文件选择框,确定文件的路径和名字(以下几种方法皆可)
  • 使用FM: WS_FILENAME_GET
DATA s_file LIKE rlgrap-filename.
CALL FUNCTION 'WS_FILENAME_GET'
 EXPORTING
   DEF_FILENAME           = '工资单.XLS '              "默认文件名
   DEF_PATH               = 'd: '                      "当前路径
   MASK                   = ',*.TXT. '                 "文件格式:All Files (*.*)|*.*|Excel Files (*.xls)|*.xls|Word files(*.doc)|*.doc
   MODE                   = 'O '                       "S = 保存,O = 打开
 "  TITLE                  = ' '                       "设置对话框名称
 IMPORTING
   FILENAME               = s_file
 "  RC                     =
 EXCEPTIONS
   INV_WINSYS             = 1
   NO_BATCH               = 2
   SELECTION_CANCEL       = 3
   SELECTION_ERROR        = 4
   OTHERS                 = 5 .
  • 使用FM: F4_FILENAME
CALL FUNCTION 'F4_FILENAME'
 EXPORTING
   PROGRAM_NAME        = SYST-CPROG       "当前程序名
   DYNPRO_NUMBER       = SYST-DYNNR       "当前屏幕编号
   FIELD_NAME          = ' '              "指定字段帮助
 IMPORTING
   FILE_NAME           = s_file           "获取到的文件名
  • 使用FM: KD_GET_FILENAME_ON_F4
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
  CHANGING
    file_name           = s_file
 EXCEPTIONS
   MASK_TOO_LONG       = 1
   OTHERS              = 2.
  • 使用Class cl_gui_frontend_services的静态方法file_open_dialog
    此方法功能强大,可以修饰文件选择框,指定默认选择路径,设置文件类型过滤,同时打开多个文件,返回用户操作等
DATA: it_tab TYPE filetable,
      gb_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
  EXPORTING
    window_title            =  'Select File'
    default_extension       = '*.xls'
    default_filename        = ' '
    file_filter             = cl_gui_frontend_services=>filetype_excel "文件过滤:或者All Files (*.*)|*.*|Excel Files (*.xls)|*.xls|Word files(*.doc)|*.doc'
    initial_directory       = 'C:'
    multiselection          = 'X'       "是否可以同时打开多个文件
  CHANGING
    file_table              =  it_tab
    rc                      =  gb_rc
  EXCEPTIONS
    file_open_dialog_failed = 1
    cntl_error              = 2
    error_no_gui            = 3
    not_supported_by_gui    = 4
    others                  = 5 .
二、 文件upload方法(转成内表)
  • 最常用FM:GUI_UPLOAD
    有同等作用的是CLASS METHOD:* cl_gui_frontend_services=>gui_upload*,文件可以按二进制或文本格式上传,数值和日期等依赖于用户的设置。上传二进制文件时,内表通常定义为只含一个数据类型为X的field。
DATA: BEGIN OF itab OCCURS 0,
      raw(255) TYPE x,
      END OF itab.
CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    filename               = 'E:\02 sap文档自建 '     "要上载文件的完整路径
    filetype               = 'ASC'                    "ASC/BIN/DAT
   CODEPAGE                      = ' '                "以数字编号的字符集,如8400是简体中文
  TABLES
    data_tab                      = itab              " 储存文件中数据的内表
 EXCEPTIONS
   file_open_error               = 1
   file_read_error               = 2
   no_batch                      = 3
   gui_refuse_filetransfer       = 4
   invalid_type                  = 5
   no_authority                  = 6 .```
- 上传excel数据可用FM: TEXT_CONVERT_XLS_TO_SAP
因为输出的I_TAB_CONVERTED_DATA类型为任意的standard table,所以此FM能方便的把excel中内容转化成格式相同的内表中,还可以去掉首行。

TYPE-POOLS truxs.
DATA:it_raw TYPE truxs_t_text_data.
DATA: BEGIN OF gt_data OCCURS 0,
col1 TYPE char10,
col2 TYPE char10,
END OF gt_data.
PARAMETERS:p_file TYPE rlgrap-filename.

*在p_file上点击F4时触发,获取文件名
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CLEAR p_file.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = p_file. "返回文件名

Excel传值
START-OF-SELECTION.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_row
i_filename = p_file
TABLES
i_tab_converted_data = gt_data "
存储数据的内表,内表列数和要上传的数据列数相同,其按照列来匹配传值
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.

- 使用FM:ALSM_EXCEL_TO_INTERNAL_TABLE
1)此FM可以限制从excel文件中第几行第几列开始,一次上传多少行多少列,但一次上传的最大行数为9999,,是由接收数据的内表intern的定义来限制的。如果要上传多于9999行的数据,要编码分批上传实现的。
2)而intern不是直接与excel数据格式相符的内表,是系统定义好的,包含了行号、列号、数据值等。要先loop这个intern内表,再一条一条传到自定义格式内表中去

DATA lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE.
DATA l_index LIKE sy-tabix.
PARAMETERS:p_file TYPE rlgrap-filename.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = '1'
i_begin_row = '2'
i_end_col = '50'
i_end_row = '50000'
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.

*将EXCEL格式中的数据导入到内表itab中
LOOP AT lt_excel.
MOVE lt_excel-col TO l_index.
CASE l_index.
WHEN'1'.
MOVE lt_excel-value TO itab-d_name.
WHEN'2'.
MOVE lt_excel-value TO itab-d_text.
WHEN'3'.
MOVE lt_excel-value TO itab-d_type.
WHEN'4'.
MOVE lt_excel-value TO itab-d_caracters.
ENDCASE.
AT END OF row.
APPEND itab.
CLEAR itab.
ENDAT.
ENDLOOP.
**********************************或者按如下方式:********************************
FIELD-SYMBOLS : <$fs>.
DATA exception TYPE REF TO cx_root.
SORT lt_excel BY row col.
TRY.
LOOP AT lt_excel.
MOVE lt_excel-col TO index.
ASSIGN COMPONENT index OF STRUCTURE i_table TO <$fs>.
MOVE lt_excel-value TO <$fs>.
AT END OF row.
APPEND i_table. "user defined internal table to store excel data
CLEAR i_table.
ENDAT.
ENDLOOP.
CATCH cx_root INTO exception.
MESSAGE 'Excel data format is wrong,please check' TYPE 'E'.
ENDTRY.


#####三、 文件download方法(内表->文件)
- 最常用FM: gui_download
等同于 cl_gui_frontend_services=>gui_download

先获取导出文件名,然后如下:
call method
cl_gui_frontend_services=>gui_download
exporting

  • BIN_FILESIZE =
    filename = s_file
    filetype = 'DAT' " ASC,WK1
  • APPEND = ' '
    changing
    data_tab = ot_data[]
    exceptions
    file_write_error = 1
    no_batch = 2
    gui_refuse_filetransfer = 3
    invalid_type = 4
    no_authority = 5.
参数简述:
1)BIN_FILESIZE:当要创建二进制文件时,必须指定文件长度,但要下载成文本文件时,传入此参数会报 FILESIZE_NIT_ALLOWED错误。2)FILENAME:要存放文件的完整路径。要保证路径有效并且如果文件存在的话没有被打开,否则会报错。
3)FILETYPE: 
** 'ASC'**——ASCII格式文件,此参数会受到CODEPAGE等其他参数的影响。      
**'IBM'**——ASCII文件,但只能包含IBM字符集的字符(CODEPAGE = '1103'),这种格式的文件通常用在软盘上。   
**'DAT'**——具有单元格形式的文本文件,但直接用excel打开的话,文本内容会受单元格格式影响(如自动会去前导零等)。这种文件可直接再用gui_upload上传到SAP程序中。   
**'DBF'**——dBase格式,对于要用excel打开的数据,此种格式更能保持数据原型,不受excel单元格格式的影响。  
**'WK1'**——Lotus 1-2-3格式。   
**'BIN'**——二进制格式文件,没有格式和字体集的限制。
4)APPEND:'X'以追加模式写文件,SPACE 当文件已存在时,以覆盖模式写文件。
5)CODEPAGE 指定写文件时用的字符集DATA_TAB 内表,包含要下载成文件的数据
---

相关文章

网友评论

      本文标题:ABAP报表数据处理:本地文件upload &&

      本文链接:https://www.haomeiwen.com/subject/vogbpttx.html