【SAP ABAP】OLE批量下载文件

2023-11-20

@SAP ABAP OLE批量下载文件

目前在做DOI的程序,发现OAOR与SMW0有相似之处。OAOR可以单独获取文件夹地址与目标文件名拼接下载。但是之前OLE下载方式都是针对一个文件的,现在摸索出了批量方式(有限制

  1. 这里将先将主要代码粘贴进来。(可先看后面
  DATA:lv_index TYPE i.
  DATA: BEGIN OF ls_data ,
          path TYPE char300,
        END OF ls_data.
  DATA:lt_data LIKE TABLE OF ls_data.
  DATA: wg_downf(128) TYPE c,  "下载模板名称
        c_temp        TYPE wwwdatatab.

  READ TABLE gt_data INTO gs_data WITH  KEY message = '' sel = 'X'.
  IF sy-subrc <> 0.
    MESSAGE '有错误行' TYPE 'S' DISPLAY LIKE  'E'.
    RETURN.
  ENDIF.
  
* 文件路径选择
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = 'EXPROT'
      def_path         = 'C:\'
      mask             = ',EXCEL文件(*.XLSX),*.xlsx,*.*,'
      mode             = 'S'
      title            = '请选择文件路径'
    IMPORTING
      filename         = g_path
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc = '3'.      "点取消退回
    MESSAGE '用户取消保存' TYPE 'S'.
    RETURN.
  ENDIF.

  CHECK NOT g_path IS INITIAL.

* 下载EXCEL模板
*使用事物码SMW0上传好模版之后 此参数可以在WWWDATA表中查询到
  c_temp-relid = 'MI'.
  c_temp-objid = cs_objname. // SMW0模板名称

”循环选中行数据
  LOOP AT gt_data INTO gs_data WHERE sel = 'X' AND message = ''.

    CLEAR:lt_data,lv_index.
    
    SPLIT g_path AT '\' INTO TABLE lt_data."将地址按照 \ 进行拆分
    lv_index = lines( lt_data )."获取拆分表的行数
    
   "读取最后一行,也就是  文件名.XLS
    READ TABLE lt_data INTO ls_data INDEX lv_index.
    IF sy-subrc = 0.
    "将文件名替换为  自定义名称.XLSX
      REPLACE  ls_data-path IN g_path WITH gs_data-zname && gs_data-zid && '.XLSX' IN  CHARACTER MODE.
      CLEAR:ls_data.
    ENDIF.
    
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = c_temp 
        destination = g_path.
    IF sy-subrc <> 0.
      MESSAGE '下载模板失败' TYPE 'S' DISPLAY LIKE 'E'.
      RETURN.
    ENDIF.
    PERFORM expot_excel USING g_path. // OLE填充数据 
  ENDLOOP.

下面是 FORM expot_excel 的代码


  INCLUDE ole2incl.
  DATA: g_excel TYPE ole2_object,
        g_wbook TYPE ole2_object,
        g_sheet TYPE ole2_object,
        g_range TYPE ole2_object.
  DATA: g_visible TYPE i VALUE 0.

  DATA:lv_txtpost TYPE string.
  DATA:lv_code  TYPE char30.



  lv_code = gs_data-zid && '/' && '15972279761'.

  PERFORM sub_initialization USING g_excel
                                    g_wbook
                                    l_file
                                    g_sheet
                                    g_visible.
."岗位获取 ,项目特有,粘贴时请忽略
  PERFORM frm_post_txt USING gs_data-zpostlv CHANGING lv_txtpost

  PERFORM sub_write_cell USING:
        g_sheet 1  2 gs_data-zname,
        g_sheet 1 5  gs_data-zid,
        g_sheet 2  5 '宇宙CTRL商务局',
        g_sheet 4 2 '男',
        g_sheet 4 5  gs_data-zyear,
        g_sheet 7 2 lv_txtpost,
        g_sheet 10 2 '123123123123',
        g_sheet 10 5 '32132131@qq.com',
        g_sheet 5 7  lv_code.

  PERFORM sub_save_excel USING  g_excel
        g_wbook
        l_file
        g_visible.

  CLEAR:g_excel,g_wbook,g_sheet,g_range,g_visible,lv_txtpost,lv_code.

下面是 FORM sub_save_excel 的代码

 SET PROPERTY OF excel 'DisplayAlerts' = 0.
  CALL METHOD OF wbook 'SAVEAS'
    EXPORTING
      #1 = filename.
      
  IF visible EQ 0.
    CALL METHOD OF wbook 'Close'.
    CALL METHOD OF excel 'QUIT'.
  ENDIF.
  
  FREE OBJECT wbook. "释放工作簿
  FREE OBJECT excel.

  WAIT UP TO '0.2' SECONDS.

其实最主要的就是在 DOWNLOAD_WEB_OBJECT,这是从SMW0中下载模板到本地。我们获取文件地址时并不能选中文件夹,而是需要给出一个文件名,所以这里默认了一个文件名’EXPORT’,其实文件名是什么都无所谓,最后都会被替换掉。

    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = c_temp 
        destination = g_path.

替换时是无法确定用户的文件夹层级有多少的,所以就需要按照 ‘\’ 切割,获取最后一行的数据,即文件名.XLS,再替换即可。

缺点

不知道是哪里没有清空或者释放,在文件下载到一定数量时,会使电脑卡顿,再到一定数量时开始黑屏卡死。
建议

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SAP ABAP】OLE批量下载文件 的相关文章

  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 让CHAT介绍下V2ray

    CHAT回复 V2Ray是一个网络工具 主要用于科学上网和保护用户的网络安全 它的名字源自Vmess Ray 光线 通过使用新的网络协议 为用户提供稳定且灵活的代理服务 下面是一些V2Ray的主要特性 1 多协议支持 V2Ray 提供了大量
  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • 基于java的学生成绩在线管理系统设计与实现

    基于java的学生成绩在线管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的学生成绩在线管理系统设计与实现的研究背景和动机是设计一个可以方便管理学生成绩的系统 该系统可以方便地记录学生的成绩 并为老师和学生提供查询和统计功能
  • 【计算机毕业设计】宝鸡文理学院学生成绩动态追踪系统

    研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人 设备和场景更立体的连接在一起 能让用户以更科幻的方式使用产品 体验高科技时代带给人们的方便 同时也能让用户体会到与以往常规产品不同的体验风格 与安卓 iOS相比较起来
  • 【gee】下载modis土地利用类型

    var china ee FeatureCollection projects assets china boundary var lc dataset ee ImageCollection MODIS 061 MCD12Q1 filter
  • 华为OD机试 Java 【计算文件大小】

    题目 一个电脑文件夹系统 每个文件夹里都有一些文件和可能还有其他子文件夹 给定所有文件夹的大小和子文件夹列表 你的任务是找出某一个文件夹及其所有子文件夹里的文件总大小 输入格式 首行有两个数字 文件夹的总数M和你要查询的文件夹ID N 之后
  • 计算机Java项目|尤文图斯足球俱乐部网上商城系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|学生成绩管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|电影购票系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|基于SpringBoot个人空间平台的设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 2024史上最全Java面试八股文(带全部答案)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 15天学会Python深度学习,我是如何办到的?

    陆陆续续有同学向我们咨询 Python编程如何上手 深度学习怎么学习 如果有人能手把手 一对一帮帮我就好了 我们非常理解初学者的茫然和困惑 大量视频 书籍 广告干扰了大家的判断 学习Python和人工智能 成为内行人不难 为此 我们推出了
  • 基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 【一种新的Burton-Miller型奇异边界方法(BM-SBM)】用于声学设计灵敏度分析,2D和3D声学设计灵敏度分析的奇异边界方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 2D 2 2 3D
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • 详解git pull和git fetch的区别:

    前言 在我们使用git的时候用的更新代码是git fetch git pull这两条指令 但是有没有小伙伴去思考过这两者的区别呢 有经验的人总是说最好用git fetch git merge 不建议用git pull 也有人说git pul
  • @Slf4j 实现日志输入到外部文件

    1 添加一个配置文件 src main resources logback spring xml
  • 使用html+css+javaScript 完成计算器

    一 先用html与css搭建骨架 思路 将计算器的数字按钮放进一个表格里 再通过css修饰 然后对指定的数字按钮或功能按钮添加事件 将需要计算的式子放进一个字符串里 最后通过全局方法eval 计算出来 html的骨架搭建 这里的用一个 di
  • 西门子300系列基本逻辑编程:手自动选择程序及自定义脉冲模块的使用

    西门子内置脉冲发生器 M0 0 0 1S M0 1 0 2S M0 2 0 4S M0 3 0 5S M0 4 0 8S M0 5 1 0S M0 6 1 6S M0 7 2 0S 案例 手自动选择程序 控制要求 I0 0是手自动选择开关
  • Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件的详细方法

    Vmware正确安装完linux虚拟机之后 这里以Ubuntu为例 其他linux或windows系统也是类似的 如果你使用的默认配置 正常情况下就可以复制 粘贴和拖拽内容的 双方向都是支持的 如果不能复制和拖拽一般是vmware tool
  • mongodb入门(2)

    目录 一 mongodb入门 1基础概念 2连接mongodb 3 数据库 4 集合 5 文档 1 插入文档 2 更新文档 3删除文档 4查询文档 6用户 1 创建用户 2查询用户 3删除用户 4修改用户 5修改密码 一 mongodb入门
  • 10 个牛逼的单行代码编程技巧,你会用吗?

    标题本文列举了十个使用一行代码即可独立完成 不依赖其他代码 的业务逻辑 主要依赖的是Java8中的Lambda和Stream等新特性以及try with resources JAXB等 1 对列表 数组中的每个元素都乘以2 Range是半开
  • Spring 中如何使用SpEL表达式语言呢?

    转自 Spring 中如何使用SpEL表达式语言呢 SpeL简介说明 SpeL Spring Expression Language是一种功能强大的表达式语言 支持运行时查询和操作对象图 使用SpeL可采用最少的代码 完成大量的工作 注意事
  • vim菜鸟学习-中级篇2(经典配置)

    参考资料 http www cnblogs com striveford archive 2011 02 09 1950369 html http blog csdn net xjanker2 article details 5832784
  • linux环境下安装jmeter

    linux压力机安装jmeter 1 在Linux服务器先安装jdk 配置环境变量 2 下载 apache jmeter 5 4 1tgz https jmeter apache org download jmeter cgi 上传到服务器
  • UE4 解决景深效果闪烁问题

    原因 1 模型的垂直竖线 造成抗锯齿算法对竖线的渲染计算 处于一种不稳定的状态 因此闪烁 解决办法 使用LOD 用贴图去替代线条模型 2 材质的法线贴图 当法线贴图含有垂直竖线的纹理效果 也会造成闪烁 比如这种幕墙材质 解决办法 关闭或动态
  • PyTorch:Torchvision的简单介绍与使用

    安装 pip install torchvision torchvision独立于pytorch 专门用来处理图像 通常用于计算机视觉领域 重点介绍torchvision最常用的三个包 models 提供了很多常用的训练好的网络模型 我们可
  • ubuntu双网卡绑定一个IP

    Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡 这个聚合起来的设备看起来是一个单独的以太网接口设备 通俗点讲就是两块网卡具有相同的IP 地址而并行链接聚合成一个逻辑链路工作 其实这项 技术在Sun和Cisco中早已存在 被称为Tr
  • Byte位元组单位-KB KiB MB MiB GB GiB区别

    一般而言大部份都只知道KB MB GB TB 等 倒是沒聽過KiB MiB 等 現在搞懂 原來分為以1000位元組或用1024位元組來計算之 這就是為什麼我們平時買硬碟或隨身碟的容量與實際真實的容量不同 像是我了8GB的隨身碟 實際為8 3
  • YOLOV5-6.1报错:OSError: [WinError 1455] 页面文件太小,无法完成操作。

    YOLOV5 6 1报错 OSError WinError 1455 页面文件太小 无法完成操作 注意 成功 解决方案 注意 数据集和之前的 共用一个数据集 使用之前的处理方式
  • vue之mixin理解与使用

    vue之mixin理解与使用 混入 mixin 提供了一种非常灵活的方式 来分发 Vue 组件中的可复用功能 一个混入对象可以包含任意组件选项 当组件使用混入对象时 所有混入对象的选项将被 混合 进入该组件本身的选项 权重 全局mixins
  • 开发之路,穷且益坚,不坠青云之志(入门开发者共勉)

    引言 2023毕业季 距离笔者毕业已过2年有余 互联网从业环境由盛转衰 互联网从业者数量剧增 市场竞争异常激烈 原本的利润空间被不断挤压 以至于很多开发者对互联网已经失去了信心与激情 互联网的市场份额依旧是占据着巨大的比重 为何互联网从业环
  • LInux基础——SELinux

    SELinux SELinux是什么 存取控制 自主式 DAC 委任式 MAC SELinux组成 SELinux安装 SELinux开关及模式 SELinux运行原理 SELinux Policy规则 getsebool setseboo
  • String.IsNullOrEmpty

    作用 指示指定的字符串是 null 还是 Empty 字符串 语法 public static bool IsNullOrEmpty string value 参数 value Type System String 要测试的字符串 返回值
  • 【SAP ABAP】OLE批量下载文件

    SAP ABAP OLE批量下载文件 目前在做DOI的程序 发现OAOR与SMW0有相似之处 OAOR可以单独获取文件夹地址与目标文件名拼接下载 但是之前OLE下载方式都是针对一个文件的 现在摸索出了批量方式 有限制 这里将先将主要代码粘贴