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.pswp.cn/pingmian/84631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Compose与View系统互操作方案

本文将全面解析 Android 现代 UI 框架 Jetpack Compose 与传统 View 系统的互操作方案,涵盖基础原理、实战技巧、性能优化和高级应用,助你实现渐进式迁移和混合开发。 一、互操作的必要性与整体架构 1.1 为什么需要互操作性 渐进式迁移:大型…

HNCTF 2025 Just Ping Write-up

part 1 路由部分主逻辑逆向 package mainimport ("net/http" )func main() {// 注册路由和处理函数// 当访问 "/api/ping" 路径时,调用 pingHandler 函数处理请求http.HandleFunc("/api/ping", pingHandler)// 注册开发测试API路由//…

OpenCV CUDA模块中用于稠密光流计算的 TV-L1(Dual TV-L1)算法类cv::cuda::OpticalFlowDual_TVL1

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::OpticalFlowDual_TVL1类是基于变分优化方法的稠密光流算法实现(Dual TV-L1 光流模型),在 GPU 上加…

ThreadPoolTaskExecutor+CompletableFuture实现多线程异步数据同步和自定义线程池监控和动态调整实现

前言 ThreadPoolTaskExecutor是Spring框架提供的一个线程池实现,它是对Java标准库中ThreadPoolExecutor的封装,提供了更便捷的配置和集成方式,特别适合在Spring环境中使用。相关线程池概念见线程&线程池相关 CompletableFuture 是 Java…

一篇文章理解js闭包和作用于原理

一、js闭包的作用原理 JS闭包是指内部函数访问外部函数变量的机制,常用于数据封装和模块化。典型应用包括创建私有变量、解决循环中的异步问题、实现函数柯里化等。案例分析展示了闭包在计数器、防抖函数等场景的使用,同时揭示了可能的内存泄漏风险。正…

GUI丝滑教程-python tinker

在 Tkinter GUI 应用中,线程可以帮助你在后台执行长时间运行的任务,而不阻塞界面响应。下面是一些技巧,帮助你在使用线程时避免 Tkinter 界面卡顿的问题。 为什么 Tkinter 界面会卡顿? Tkinter 使用 主线程 来处理 UI 更新&…

第一部分-数据通信网络基础

目录 一、什么是网络通信? 二、网络通信设备的基本识别 1.双绞线 2.集线器(物理层设备) 3.中继器(物理层设备) 4.接入交换机 5.汇聚交换机 6.核心交换机 7.路由器 8.无线路由器 9.光猫 一、什么是网络通信?…

windows电脑解决笔记本搜索不到wifi问题

windows笔记本电脑明明打开了wifi功能,却搜索不到wifi,此问题可能是网络适配器被禁用的原因导致,通过以下方法也许能解决,无需重启电脑 1、右键点击网络或wifi图标,打开界面”网络和internet“ 2、选择”高级网络设置…

C# 界面检测显示器移除并在可用显示器上显示

C# 检测显示器被移除,将界面在当前可用的显示器上显示,避免程序在任务栏点击无响应。 using System; using System.Linq; using System.Windows.Forms;public class MonitorWatcher : IDisposable {private readonly Form _targetForm;private Screen …

JAVA实战开源项目:青年公寓服务平台 (Vue+SpringBoot) 附源码

本文项目编号 T 233 ,文末自助获取源码 \color{red}{T233,文末自助获取源码} T233,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

阿里云服务状态监控:实时掌握云服务健康状况

前言 在云计算时代,企业和开发者越来越依赖云服务提供商的基础设施和服务。当我们的应用部署在云上,服务的可用性和稳定性就与云服务提供商息息相关。一旦云服务出现故障或维护,可能会对我们的业务造成直接影响。因此,实时了解云服务的运行状态变得尤为重要。阿里云作为国…

使用VSCode开发FastAPI指南

1概述 FastAPI 是一个现代的高性能 Web 框架,用于使用 Python 构建 API。它旨在让开发者轻松快速高效地构建 API,同时提供 API 的自动验证、序列化和文档记录等功能,使其成为构建 Web 服务和微服务的热门选择。 在这个 FastAPI 教程中&#…

2025年硬件实习/秋招面试准备

前言 暑期即将到来,有很多研一研二以及大三大四的同学准备硬件类(硬件研发、嵌入式硬件、layout、电源设计、射频、硬件测试、工艺、FAE)的实习或秋招。鉴于此,总结一下网友们秋招、实习中的硬件高频考点,并分析他们是…

VSCode - Trae 插件关闭弹出框代码补全

Trae 插件关闭弹出框代码补全 弹出框代码补全与非弹出框代码补全 如下是弹出框代码补全 如下是非弹出框代码补全 关闭 / 启用弹出框代码补全 点击 【管理】(小齿轮) -> 点击 【设置】 取消勾选(如果需要启用,则勾选即可&…

Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程ES(三)

DSL官方地址: DSL查询分类 Elasticsearch提供了基于JSON的DSL(https://www.elastic.co/docs/explore-analyze/query-filter/languages/querydsl)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据&#xff0…

我们来学mysql -- keepalive主从高可用

keepalive主从高可用 简明扼要安装KP场景“高可用”配置主keepalived.conf从keepalived.confmysql_check.sh 高可用验证KP运行情况通过vip连接mysqlvip连接上创建数据库关闭主库所在服务器的KPvip连接上再次创建数据库 结尾 简明扼要 搭建mysql的主从八股文如是:主…

Compose笔记(二十六)--DatePicker

这一节主要了解一下Compose中的DatePicker,DatePicker是一个用于选择日期的组件,它提供了直观的界面让用户可以通过日历视图或直接输入来选择年、月、日。我们在开发中时常会用到日期选择器,简单总结如下: API: DatePickerDialog onDismissRequest&…

【靶场】upload-labs-文件上传漏洞闯关

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.第一关1.保存html页面2.修改页面html3.访问修改后的本地html文件4.上传php文件5.访问上传的php2.第二关1.抓上传包修改文件类型2.上传成功3.第三关1.phtml php3会被解析为php原理2.上传成功4…

基于 Transformer RoBERTa的情感分类任务实践总结之四——PGM、EMA

整合了以下五大核心技术:R-Drop、PGM 对抗训练、EMA、标签平滑、CosineAnnealing 学习率调度。 1. R-Drop(Regularized Dropout) 原理:同一个样本做两次前向传播(同 dropout mask),计算两次输…

录制mp4 rospy

ros 预览摄像头 #!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2# 初始化 bridge bridge CvBridge()def image_callback(msg):# 将ROS图像消息转换为OpenCV图像cv_image bridge.imgmsg_to_cv2(msg, desir…