【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批量下载文件 的相关文章

  • 软件测试|Python中如何提取列表中索引为奇数的元素

    简介 在Python中 我们经常需要从列表中提取特定位置的元素 如果我们想要提取列表中索引为奇数的元素 可以使用一些简单的方法来实现这一目标 本文将介绍如何在Python中提取列表中索引为奇数的元素 并提供示例代码来帮助大家更好地理解这个过
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|Python数据可视化神器——pyecharts教程(九)

    使用pyecharts绘制K线图进阶版 简介 K线图 Kandlestick Chart 又称蜡烛图 是一种用于可视化金融市场价格走势和交易数据的图表类型 它是股票 外汇 期货等金融市场中最常用的技术分析工具之一 可以提供关于价格变动 趋势
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 基于java的物流信息网系统设计与实现

    基于java的物流信息网系统设计与实现 I 引言 A 研究背景和动机 基于Java的物流信息网系统设计与实现的研究背景和动机 随着互联网的普及和电子商务的快速发展 物流信息网系统已成为现代物流管理的重要组成部分 物流信息网系统能够实现物流信
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 2024诸多大厂春招提前启动!Android的程序员还在等什么

    春招 提前批 已开 xdm别打瞌睡了 格力 顺丰 酷狗 沃尔玛中国 理想 科大讯飞等开启春招 开始收简历了 还有hc的企业提前抢人 春招时间短 节奏快 招满即止 就算挂了也绝不能不投 对企业来说 秋招和春招都是储备人才的黄金时期 春招中 除
  • 最新整理Java面试八股文,大厂必备神器

    在看这篇文章之前 我想我们需要先搞明白八股文是什么 明清科举考试的一种文体 也称制义 制艺 时文 八比文 八股文章就四书五经取题 内容必须用古人的语气 绝对不允许自由发挥 而句子的长短 字的繁简 声调高低等也都要相对成文 字数也有限制 八股
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Python 文件的复制重命名以及xlsx文件中表格分开保存

    1 需要的头文件 import shutil import os import openpyxl 2 复制文件以及重命名 直接使用shutil库复制 重命名 移动即可 函数封装示例 source path 为全局变量被复制文件路径 dest
  • 春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了

    俺滴座右铭是不在沉默中爆发 就在沉默中灭亡 一起加油学习 珍惜现在来之不易的学习时光吧 等工作之后 你就会发现 想学习真的需要挤时间 厚积薄发啦 我们知道Java是面向对象的静态型编程语言 在Java的世界里万物皆对象 但我认为是万物皆数据
  • APP开发毕业设计|ssm爱心小屋公益机构智慧管理APP

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 【卡尔曼滤波】具有梯度流的一类系统的扩散映射卡尔曼滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章
  • 详解toLowerCase(判断字符串相等)

    一 toLowerCase 函数简介 toLowerCase 是一个在多个编程语言中都存在的字符串方法 它的作用是将字符串中的所有大写字母转换为对应的小写字母 常用于文本处理 搜索和比较等情况 以确保字符串的一致性和非大小写敏感的操作 二
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 2024年华为OD机试真题-查找接口成功率最优时间段-Python-OD统一考试(C卷)

    题目描述 服务之间交换的接口成功率作为服务调用关键质量特性 某个时间段内的接口失败率使用一个数组表示 数组中每个元素都是单位时间内失败率数值 数组中的数值为0 100的整数 给定一个数值 minAverageLost 表示某个时间段内平均失
  • 2024最强Java面试八股文合集(持续更新)

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

    sychnorized 1 对象锁 包括方法锁 默认锁对象为this 当前实例对象 和同步代码块锁 自己指定锁对象 2 类锁 指synchronize修饰静态的方法或指定锁对象为Class对象 3 加锁和释放锁的原理 现象 时机 内置锁th
  • 在 Python 中实现 List 抽象

    在 Python 中 创建一个包含多个对象的 list 很常见 例如 对于一组具有相同功能的对象 比如播放声音 希望能够使用类似 my list play 的语法来触发 list 中所有对象的 play 方法 另一个例子是 当希望关闭 li

随机推荐

  • 详解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下载方式都是针对一个文件的 现在摸索出了批量方式 有限制 这里将先将主要代码粘贴