EXCEL——上载与下载方法总结

无论是upload还是download,首先要确定文件的路径和名字。
首先介绍获取文件路径方法(这里仅介绍一种作为参考)

PARAMETERS:P_PATH(80) OBLIGATORY. 

AT SELECTION-SCREEN OUTPUT.              " pbo

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
  "调用选择文件函数"
  PERFORM FRM_OPEN_DIALOG.
*&---------------------------------------------------------------------*
*& Form FRM_OPEN_DIALOG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_OPEN_DIALOG .
  DATA:LT_FILE_TABLE TYPE FILETABLE.
  DATA:LW_FILE_TABLE TYPE FILE_TABLE ##NEEDED.
  DATA:LV_RC TYPE I.
  DATA:LC_FILE_FILTER      TYPE STRING VALUE 'Excel(*.xlsx)' ##NO_TEXT,
       LC_DEFAULT_FILENAME TYPE STRING VALUE '*.XLSX'.
  DATA:LC_WINDOW_TITLE TYPE STRING .
  LC_WINDOW_TITLE = TEXT-002.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            = LC_WINDOW_TITLE      " 文件打开对话框的标题
      DEFAULT_FILENAME        = LC_DEFAULT_FILENAME  " 默认excel文件"
      INITIAL_DIRECTORY       = ''                   " 默认打开D盘,也可以默认空"D:\
      MULTISELECTION          = ''                   " 文件单选"
      FILE_FILTER             = LC_FILE_FILTER       " 文件扩展名过滤字符串
    CHANGING
      FILE_TABLE              = LT_FILE_TABLE
      RC                      = LV_RC
    EXCEPTIONS ##SUBRC_OK
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      OTHERS                  = 5.
  IF LV_RC EQ 1."因为文件单选,所以这里判断一下选择的数量为1"
    READ TABLE LT_FILE_TABLE INDEX 1 INTO P_PATH.
  ELSEIF LV_RC EQ 0.

  ELSE.
    MESSAGE S009(ZFI09).
  ENDIF.

一、上载(转内表)

(一)、最常用FM的是:GUI_UPLOAD
有同等作用的是CLASS cl_gui_frontend_services的静态方法gui_upload,文件可以按二进制或文本格式上传,数值和日期等依赖于用户的设置。
上传二进制文件时,内表通常定义为只含一个数据类型为X的field,如:

data:begin of itab occurs 0,
 raw(255) type X,
        end fo itab.
CALL FUNCTION 'GUI_UPLOAD'
           exporting
              filetype =  'BIN'
              filename = 'C:/DOWNLOAD.BIN'
           tables
             data_tab = itab.

主要参数:输入有filename 要上传文件的完成路径, filetype 包括’BIN’ ‘DAT’ 'ASC’等,codepage 以数字编号的字符集,如8400是简体中文
    输出有data_tab 储存文件中数据的内表
    
(二)、对上传excel数据可用FM TEXT_CONVERT_XLS_TO_SAP

因为输出的I_TAB_CONVERTED_DATA类型为任意的standard table,所以此FM能方便的把excel中内容转化成格式相同的内表中。

field-symbols: type standard table.
call function 'TEXT_CONVERT_XLS_TO_SAP'
    exporting
*         I_FIELD_SEPERATOR          =
*         I_LINE_HEADER              =
      i_tab_raw_data             = raw_data
      i_filename                 = excel_file
    tables
      i_tab_converted_data       =
   exceptions
     conversion_failed          = 1
     others                     = 2.

参数i_tab_raw_data虽为改办field,但好像没什么作用,传入一个空数据也可正常使用。

(三)、ALSM_EXCEL_TO_INTERNAL_TABLE

call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    exporting
      filename                = p_file
      i_begin_col             = p_scol
      i_begin_row             = p_srow
      i_end_col               = p_ecol
      i_end_row               = p_erow
    tables
      intern                  = i_intern
    exceptions
      inconsistent_parameters = 1
      upload_ole              = 2
      others                  = 3.

此FM可以限制从excel文件中第几行第几列开始,一次上传多少行多少列,但一次上传的最大行数为9999,是由接收数据的内表intern的定义来限制的。所以如果要上传多于9999行的数据,要编码分批上传实现的。而intern不是直接与excel数据格式相符的内表,是系统定义好的,包含了行号、列号、数据值等,具体的请参照系统定义,因此要想转成自己定义符合格式的内表,可用下面代码实现:

field-symbols : <$fs>.
data  exception type ref to cx_root.
sort i_intern by row col.
    try.
        loop at i_intern.
          move i_intern-col to index.
          assign component index of structure i_table to <$fs>.
          move i_intern-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.

PS:sheet数据被截取解决方法
复制:函数ALSM_EXCEL_TO_INTERNAL_TABLE
-> ZALSM_EXCEL_TO_INTERNAL_TABLE
修改 zalsmex_tabline-value 的长度
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
TOP中要添加如下代码:
在这里插入图片描述
二、下载模板

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值