当前位置: 首页 > ops >正文

ABAP 上传 excel 报表

(1)先在屏幕上增加上传文件的按钮

"屏幕选择条件"
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
    PARAMETERS : p_source  LIKE rlgrap-filename .
SELECTION-SCREEN END OF BLOCK b1.

你会发现,上面的代码只是简单的单文本框,没有可以让我们选择的界面

(2)为单文本框增添搜索帮助(PARAMETERS自定义搜索帮助)

  AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_source."防止数据复用"CLEAR p_source."获取文件名称"PERFORM get_filename.START-OF-SELECTION."屏幕选择结束标志/处理数据程序开始执行"

get_filename 的四种方法

① 获取文件名称方法一(不推荐)

 FORM GET_FILENAME1.TRY.CALL FUNCTION 'WS_FILENAME_GET' "虽然该函数仍然可以使用 , 但是该函数已经过时了"EXPORTINGDEF_FILENAME      = '' "默认文件名称"DEF_PATH        = '' "路径"" 格式 : (空格不可少) 名称1 , *.xls (格式1),名称2 , *.xlsx(格式2) ,名称3 ,*.*.(格式3 , 注意 : . 号不可缺) """MASK          = ' XLS,*.xls,XLSX,*.xlsx,All Files,*.*.'MASK          = ''" 弹出框的模式 S -- 用来保存文件 O -- 用来打开文件 "MODE          = '0'TITLE         = '请选择文件 'IMPORTINGFILENAME        = p_source" RC           = "EXCEPTIONSINV_WINSYS       = 1NO_BATCH        = 2SELECTION_CANCEL    = 3 "如果用户取消了对话框"SELECTION_ERROR    = 4OTHERS         = 5 .ENDTRY.ENDFORM.

② 获取文件名称方法二

FORM GET_FILENAME2.DATA : G_RC TYPE I.DATA : L_OBJ TYPE REF TO CL_GUI_FRONTEND_SERVICES.DATA : IT_FILE TYPE FILETABLE WITH HEADER LINE.CREATE OBJECT L_OBJ.CALL METHOD L_OBJ->FILE_OPEN_DIALOGEXPORTINGFILE_FILTER       = ''INITIAL_DIRECTORY = ''CHANGINGFILE_TABLE        = IT_FILE[]RC                = G_RCEXCEPTIONSfile_open_dialog_failed = 1cntl_error              = 2error_no_gui            = 3not_supported_by_gui    = 4OTHERS                  = 5.READ TABLE IT_FILE INDEX 1.P_SOURCE = IT_FILE-FILENAME.ENDFORM.

③ 获取文件名称方法三

FORM GET_FILENAME3.CALL FUNCTION 'F4_FILENAME'EXPORTINGPROGRAM_NAME        = SYST-CPROG "程序名"DYNPRO_NUMBER       = SYST-DYNNR "当前屏幕号"FIELD_NAME          = ' '        "文件类型 , 默认为空"IMPORTINGFILE_NAME           = P_SOURCE.  "文件名称"
ENDFORM.

④ 获取文件名称方法四

FORM GET_FILENAME4.CALL FUNCTION 'KD_GET_FILENAME_ON_F4'EXPORTINGPROGRAM_NAME        = SYST-REPIDDYNPRO_NUMBER       = SYST-DYNNRFIELD_NAME          = ' 'STATIC              = ' 'MASK                = ' 'FILEOPERATION       = 'R'PATH                = ' 'CHANGINGFILE_NAME            = P_SOURCE"LOCATION_FLAG       = 'P'EXCEPTIONSMASK_TOO_LONG       = 1OTHERS              = 2.
ENDFORM.

这时候就能获取文件的路径了

(3)将excel数据读取到内表

① 定义内表(推荐全局定义)

"接收EXCEL报表数据的内表 (承接excel数据的内表格式一般都是string类型,内表定义多少列,就会读取EXCEL 前几列)"
DATA :
  BEGIN OF gt_excel OCCURS 0,
    aufnr(12), " 工單號碼"
    gstrs(10), " 工單開始日期"
    gltrs(10), " 工單結束日期"
    info(50),"信息提示"
  END OF gt_excel.

② 将excel数据读取到内表

 

FORM get_excel .
  "如果为空,表示没有选中文件"
  IF p_source EQ ''.
    MESSAGE s000(1) WITH '未选择文件!' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

  "文件选中后 , 将文件信息读取到内表 , 注意 : 文件信息的排版 , 必须与获取数据内表的数据结构 , 排版要一致 , 不然会报错"
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' "可以是Excel文件,也可以是Txt文件"
    EXPORTING
"*     I_FIELD_SEPERATOR    = 分隔符,默认为TAB"
      i_line_header        = 'X' "文本中的第一行是否是标题头,如果是则不会读取"
      i_tab_raw_data       = il_raw "该参数实际上没有使用到,但为必输参数"
      i_filename           = p_source
    TABLES
      i_tab_converted_data = gt_excel "会自动的将Excel、Txt文件中的数据一行行读取到数据内表中"
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.

  "如果excel 数据格式不正确 或 excel 数据为空 , 提示重新选择文件"

  IF gt_excel[] IS  INITIAL .
    MESSAGE s000(1) WITH '文件无数据或文件格式出错,请重新选择文件!' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
*----------------------------------------------------------------------*
* LEAVE LIST-PROCESSING.
*
* 如果写在at selection-screen 就返回到输出界面
* 如果写在start-of-selection. 就返回到initialization事件
*
*----------------------------------------------------------------------*
ENDFORM.
 

http://www.xdnf.cn/news/13603.html

相关文章:

  • Vue3+TypeScript实现解释器模式
  • 使用 C/C++的OpenCV 裁剪 MP4 视频
  • Kafka 架构原理解析
  • 黑马教程强化day2-3
  • 深度学习破解图形验证码:从原理到99.9%识别率实战
  • Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
  • HINet: Half Instance Normalization Network for Image Restoration论文阅读
  • CardiacNet:从超声心动图视频中学习重建用于心脏病评估的异常
  • Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型时序预测对比
  • 视频自动生成字幕原理和自动生成字幕的应用实例
  • 芝麻酱工作创新点分享2——mysql的窗口函数使用
  • oracle表数据误删除恢复(闪回操作)
  • 目标检测我来惹2-SPPNet
  • map()函数
  • Postgresql日常使用
  • 展开说说Android之Glide详解_使用篇
  • 38道Linux命令高频题整理(附答案背诵版)
  • 时序数据库Apache IoTDB核心技术深度解析
  • 每日一博 - JWT 安全实战指南
  • C++11 nullptr:从入门到精通
  • Kafka入门:解锁核心组件,开启消息队列之旅
  • UE5 C++ Rider 编程指南 2: 如何使用Live Template编程实时模板?
  • Lavazza拉瓦萨再度牵手兰博基尼汽车 百年咖啡注入超跑速度
  • 技术赋能——AI社媒矩阵营销工具如何重构社媒矩阵底层架构
  • PDF文件合并、删除特定页面的工具分享
  • Gemini 2.5 Pro 和Claude 3.7 理综物理真题,考研数学真题实战对比,国内直接使用
  • Springboot实现Java程序和线程池的优雅关闭
  • 暴雨服务器成功交付长沙市第四医院
  • 大麦逆向so
  • 第 87 场周赛:比较含退格的字符串、数组中的最长山脉、一手顺子、访问所有节点的最短路径