三步搞定ABAP DOI操作EXCEL

2023-10-30

---------------------------------------------------前言---------------------------------------------------------------------------------

ABAP可以使用OLE与DOI两种方式实现操作EXCEL。使用OLE时,每个单元格的值和样式都需要写代码实现,特别是对于不规则的格式, 代码量巨大. 而DOI是从服务器已经上传的EXCEL模板中下载模板然后打开修改实现数据保存。当然,也可以直接创建新的EXCEL文件往里面传递数据并设置格式(这样好像又走回老路了,不是我们要的, OLE与DOI的区别就好像是面向过程与面向对象的区别).

简单来说,DOI操作EXCEL主要有以下几步:

准备工作:上传Excel模板

第一步:下载Excel到本地

第二步:打开Excel文档

第三步:   写入数据

 ----------------------------------------------------正文-------------------------------------------------------------------------------------

准备工作:上传Excel模板:

1.输入Tcode: smw0 如图所示:


2.选择二进制数据选择,回车后进入查询界面,包: MI


3.点击执行:进入显示列表,点击新建图标:


4.输入对象名称与描述后点击打开文件选择框,,选择文件后,会提示选择包,

 

好了,可以写代码了(复制可以直接运行,前提是已经上传模板),

REPORT  zr04_ole_templet.

DATA:c_export_filename_xls   TYPE string VALUE 'ZRRFQ01_1.XLS', "导出模板默认文件名 '数据导入模板'
           c_objid_xls                      
TYPE wwwdatatab-objid VALUE 'ZRRFQ01_1.XLS'.   "存放模板的对象id

DATA:  lo_objdata                       LIKE wwwdatatab,                                "Excel模板对象
             ls_destination               
LIKE rlgrap-filename                           ,"下载保存的目标路径
             lc_path                           
TYPE string,        "存储路径
             lc_fullpath                      
TYPE string,       "文件完整路径
             li_rc                                 
LIKE sy-subrc.   "返回值

DATA: excel_obj                         TYPE ole2_object,
           book_obj                         
TYPE ole2_object,
           sheet_obj                       
TYPE ole2_object,
           cell_obj                           
TYPE ole2_object.

START-OF-SELECTION.

第一步: 下载Excel到本地
  
PERFORM download_xls_template.

第二步:打开Excel文档
  
PERFORM open_excel.

第三步:   写入数据
  
PERFORM write_excel.

*&---------------------------------------------------------------------*
*&      Form  download_xls_template
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM download_xls_template.

* 获取保存路径
  
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
    
CHANGING
      desktop_directory 
lc_path.
  
IF lc_path IS INITIAL.
    lc_path 
= 'C:\TEMP'.
  
ENDIF.
  
CONCATENATE lc_path '\' c_export_filename_xls INTO lc_fullpath.

*  检查模板是否存在
  
SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
  
WHERE srtf2 = 0 AND relid = 'MI' AND objid c_objid_xls.
  
IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
    
MESSAGE e000(zpp001) WITH c_export_filename_xls.
  
ENDIF.

*  下载模板
  ls_destination 
lc_fullpath.
  
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    
EXPORTING
      
key         = lo_objdata
      destination 
ls_destination
    
IMPORTING
      rc          
li_rc.
  
IF li_rc NE 0.
    
MESSAGE e001(zpp001) WITH c_export_filename_xls.
  
ENDIF.
ENDFORM.                    "download_xls_template


*&---------------------------------------------------------------------*
*&      Form  open_excel
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM open_excel.

  
CREATE OBJECT excel_obj 'excel.APPLICATION'.
  
IF sy-subrc NE 0.
    
MESSAGE 'EXCEL创建错误' TYPE 'S' DISPLAY LIKE 'E'.
    
STOP.
  
ENDIF.
  
CALL METHOD OF excel_obj 'WORKBOOKS' = book_obj.
  
SET PROPERTY OF excel_obj 'VISIBLE' = 1.
  
SET PROPERTY OF excel_obj 'SheetsInNewWorkbook' = 1.

*  打开excel文件 , (新建使用:CALL METHOD OF book_obj 'Add'   = sheet_obj)
  
CALL METHOD OF  book_obj 'Open'   = sheet_obj
        
   EXPORTING  #1       ls_destination.
  
CALL METHOD OF  sheet_obj 'ACTIVATE'.
  
FREE OBJECT sheet_obj.  "OK
ENDFORM.                    "open_excel

*&---------------------------------------------------------------------*
*&      Form  write_excel
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM write_excel.
  
DATA: it_spfli LIKE spfli OCCURS 10 WITH HEADER LINE.
  
DATA: TYPE i. "行号
*取数据
  
SELECT FROM spfli INTO TABLE it_spfli UP TO 10 ROWS.
* 输出Excel表头,自定义格式的列等
  
PERFORM fill_cell USING 1 1 1 'Flug'(001).
  
PERFORM fill_cell USING 1 2 1 'Nr'(002).
  
PERFORM fill_cell USING 1 3 1 'Von'(003).
  
PERFORM fill_cell USING 1 4 1 'Nach'(004).
  
PERFORM fill_cell USING 1 5 1 'Zeit'(005).
* 复制数据到Excel,针对固定格式
  
LOOP AT it_spfli.
    h 
sy-tabix + 1.
    
PERFORM fill_cell USING 1 0 it_spfli-carrid.
    
PERFORM fill_cell USING 2 0 it_spfli-connid.
    
PERFORM fill_cell USING 3 0 it_spfli-cityfrom.
    
PERFORM fill_cell USING 4 0 it_spfli-cityto.
    
PERFORM fill_cell USING 5 0 it_spfli-deptime.
  
ENDLOOP.
  
FREE OBJECT cell_obj.
ENDFORM.                    "write_excel

*&---------------------------------------------------------------------*
*&      Form  FILL_CELL
*&---------------------------------------------------------------------*
*   row:  行号,
*   col:  列号,
*   bold: 字体是否加粗,0,否,1是.
*   val:  填充值
*----------------------------------------------------------------------*
FORM fill_cell  USING row col bold val.
  
CALL METHOD OF  excel_obj 'CELLS'   = cell_obj
    
EXPORTING  #1        = row  #2        = col.
  
SET PROPERTY OF cell_obj 'VALUE' = val.
  
FREE OBJECT cell_obj.
ENDFORM.                    "FILL_CELL


效果图:



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

三步搞定ABAP DOI操作EXCEL 的相关文章

  • VBA FreeLibrary 不卸载 DLL

    当我使用完一个 DLL 文件后 我需要删除它 代码完成后清理 我尝试在 Excel VBA 中使用 LoadLibrary 和 FreeLibrary 但无论我做什么 Excel exe 都会坚持 DLL 文件 Public Declare
  • VBA - 如何从网站下载.xls并将数据放入Excel文件

    我设法使用 VBA 达到准备从网络下载 Excel 文件的程度 但我无法弄清楚如何实际下载该文件并将其内容放入我正在使用的 Excel 文件中 有什么建议么 谢谢 这是到目前为止的代码 Sub GetData Dim IE As Inter
  • 如何使用 VBA 将行从一张 Excel 工作表复制到另一张 Excel 工作表并创建重复项?

    我有一个包含两张表的 Excel 工作簿 sheet1 在 A 到 R 列中包含一个大型数据表 标题位于第 1 行 Sheet2 在 A 到 AO 列中包含数据 我试图使用 VBA 从sheet1 复制行并将它们粘贴到sheet2 的末尾
  • 从原始数据创建 n 个新行,例如 (1000....1000+n)

    我需要从 Excel 工作簿中读取数据 其中数据以这种方式存储 Company Accounts Company1 3000 3999 Company2 4000 4019 4021 4024 在 SSIS 中使用 OLE DB 目标的预期
  • 复制数据透视表格式

    我无法将数据透视表格式复制到新工作表 基本上我想做的是 someRange Copy someOtherRange pasteSpecial xlPasteValues someOtherRange pasteSpecial xlPaste
  • 我需要使用 VBA 将数据从 Excel 插入 SQL Server

    我需要插入test vba xlsx将数据写入 SQL Server 到特定数据库 Sub insertion Dim conn As ADODB Connection Dim rs As ADODB Recordset Dim sConn
  • excel公式剥离html

    我想从文本值的左侧和右侧剥离所有 html 我有这个
  • 如何从Excel调用VBA函数

    我有一个 excel 文件 我必须在其中放置验证规则 我有一个单元格表示 客户时间 用户可以在其中输入时间 但它是自定义时间 用户可以这样输入时间 23 45 98 20 100 30 用户不能输入字符串 并且不能输入除冒号之外的特殊字符
  • 如果工作表不存在,Pandas 将工作表附加到工作簿,否则覆盖工作表

    我正在使用 pandas 更新现有的 Excel 工作簿 当使用ExcelWriter对象 我可以覆盖工作表 如果存在 否则创建一个新工作表吗 我的代码附加了新工作表 但是当我尝试覆盖现有工作表时 它会附加一个名称略有不同的新工作表 例如
  • Python:使用Excel CSV文件仅读取某些列和行

    虽然我可以读取 csv 文件而不是读取整个文件 但如何仅打印某些行和列 想象一下这是 Excel A B C D E State Heart Disease Rate Stroke Death Rate HIV Diagnosis Rate
  • 如何自动将图表从 Excel(或 Calc)导出为 PNG

    问题 我正在开发一个 Web 应用程序 它将数据从数据库导出到 Excel 包括图表 这首先是导出的主要原因 现在我希望图表在网页上也可见 而不需要导出数据并打开下载的 Excel 文件 这当然可以使用 JS 库来完成 但是由于图表相当复杂
  • Excel的解析路径

    其实我想问以下问题 对于位于 目录中定义的 PATH 怎么能 我找出这些目录中的哪个 找到了 因为我需要使用 Process Run 从 C 运行 Excel 并且只需指示 Excel 即可正常工作 Windows 似乎知道在哪里可以找到它
  • 如何使用 pandas.to_excel() 创建 Excel **表格**?

    Need the achieve this programmatically from a dataframe https learn microsoft com en us power bi service admin troublesh
  • 使用 VBA 从数据透视表中提取数据

    我编写了以下 vba 代码 该代码应该从 old xlsx 的某些单元格导入任何现有数据 这些单元格是数据透视表的一部分 并且 OE gt location gt qual in 作为其行的子单元格 该列由手动输入的日期决定 strForm
  • 是否有任何公式可用于将特定单元格复制指定次数?

    目前我正在处理一份数据 其中我有一个公司名称列表 例如 1 A 2 B 3 C 还有很多 需要的结果是 1 A 2 A 3 A 4 A 5 A 6 B 7 B 8 B 9 B 10 B 11 C 12 C 13 C 14 C 15 C 等等
  • 从嵌入的谷歌地图中提取标记坐标

    对此还很陌生 所以请耐心等待 我需要从嵌入的谷歌地图中提取标记坐标 示例链接是http www picknpay co za store search http www picknpay co za store search我想提取搜索时地
  • Excel:包括过滤器中的第一行

    我正在特别考虑 Excel VBA 的 AutoFilter 方法 但我认为我的问题也适用于 GUI 当我将筛选器应用于 Excel 工作表时 未选择任何内容 筛选器将应用于所有行从第二次开始 有什么方法可以包含第一行 以便它也可以被过滤掉
  • 无法使用 Excel JavaScript API 设置 NumberFormat

    我正在使用 Excel Javascript API 在搜索文档后 仍然找不到我想要实现的解决方案 因此 我想将所有内容设置为数字格式 文本 这样 Excel 的自动格式设置就不会与任何单元格的内容混淆 不会删除前导零或更改日期格式 文档建
  • 如何从另一个 Excel 实例引用工作簿

    我相信我的问题相当简单 我有一个工作簿 我正在使用它从另一个软件 SAP 获取一些数据 当我从软件导出数据时 它会自动打开一个 xlsx 文件 然后我需要做的是从该文件复制一些数据 粘贴到我的原始工作簿上 然后关闭该文件 我的代码中给我带来
  • 根据其他列中的条件对列中的唯一值求和

    A B 1 Total 1 900 2 Product A 700 3 Product A 700 4 Product B 300

随机推荐

  • 踏浪点神:新手该如何避免频繁重仓交易?

    期货市场中最忌讳的就是让情绪影响交易 但很多人却又很难避免这一点 其中表现最为突出的就是频繁操作了 自信地以为 多劳多得 近乎疯狂地买卖 满脑子的愤怒都急切地想要通过 自杀 的方式得以宣泄 这就是所谓的 交易失控 大多数人在事后冷静下来了都
  • K8S内容分发网络之集群,nginx,负载均衡,防火墙

    目录 第一章 实验架构需求 第二章 实验环境准备 2 1 节点准备 2 2 环境准备 2 3 在master node01 node02上操作安装docker 2 4 所有节点安装kubeadm kubelet和kubectl 2 5 部署
  • 使用dplyr包中的rename函数重命名R语言数据框中的指定列

    使用dplyr包中的rename函数重命名R语言数据框中的指定列 在R语言中 dplyr包提供了一组功能强大且易于使用的函数 用于对数据进行操作和转换 其中 rename函数可以用于重命名数据框中的指定列 本文将介绍如何使用dplyr包中的
  • DVWA(七) - 使用python脚本实现SQL盲注

    SQL Injection Blind sql盲注其实就是sql注入的一种 但是不会根据sql注入的攻击语句返回你想要知道的信息 盲注分为两种 布尔盲注以及时间盲注 布尔盲注 根据你的注入信息返回True和Fales 而返回的True和Fa
  • 【Java入门学习笔记】——第六天 import语句,类的访问控制权限问题,对象数组

    Q 怎样使用import语句 A import语句的作用如下 1 引入类库中的类 2 引入自定义包中的类 需要把程序使用的自定义的包名所形成的目录都放在同一文件夹中 Example01 所有包名形成的目录都要放在Example01中 stu
  • 职业素质学习心得

    名言 1 古之立大事者 不惟有超世之才 必有坚韧不拔之志 2 摒弃侥幸之念 必取百炼成刚 厚积分秒之功 始得一鸣惊人 一 心态决定一切 如果你有一个梦想 维护她 坚守她 实现她 企业招聘看重两个方面 心态 积极 能力 强大 公司待遇衡量标准
  • iOS反编译修改ipa的启动图

    启动图制作脚本点击此获取 步骤一 先创建一个iOS项目 并制作启动图 点击获取教程链接 步骤二 运行上述创建的项目 将会在Products目录得到一个xx app 右键选择 Show in Finder 再右键选择 显示包内容 取出Laun
  • C++11 之列表初始化

    在 c 98 03 中的对象初始化方法有很多种 请看下面的代码 初始化列表 int i arr 3 1 2 3 普通数组 struct A int x struct B int i int j b a 1 2 3 POD 类型即 plain
  • Memcache介绍及安装部署

    Memcache 官网 http memcached org 1 Memcache 的特性 1 可以通过做集群同步的方式 让各 memcache 服务器的数据进行同步 从而实现数据的一致性 2 memcached使用libevent库 能在
  • 国庆7天没休息,我用17张图画明白了SpringCloudAlibaba

    大家好 今天给大家介绍一个非常热门的技术 同时也是面试的时候面试官特别喜欢问的一个话题 那就是 SpringCloudAlibaba 的底层原理 现在大家都知道 SpringCloudAlibaba 风靡 Java 开发行业 各个公司都在用
  • pycharm导入第三方库

    第一步 点击文件按钮 第二步 点击设置 第三步 选择项目 python解释器 第四步 点击右侧栏的 第五步 输入要导入的库 进行搜索 第六步 点击安装包 等待安装完成即可
  • 基于springboot+vue的开源mes系统

    真正的大师 永远都怀着一颗学徒的心 一 项目简介 基于springboot vue的开源mes系统 二 实现功能 常规管理 现场数据采集 系统管理 菜单管理 用户管理 日志管理 角色管理 基础数据配置平台 基础数据维护 物料管理 物料台账
  • 程序员常去的个顶级开发社区

    程序员常去的个顶级开发社区 Stack Overflow 9月份 Stack Overflow也将迎来其6岁的生日 毫无疑问 Stack Overflow是全球最受程序员欢迎的开发社区 而且也是内容最丰富的社区之一 官方网站 http st
  • checkpatch海思SDK代码遇见的常见错误《一》

    01 WARNING AVOID EXTERNS externs should be avoided in c files 3 FILE sample region sample region c 3 extern C ifdef cplu
  • C++面试题分享

    在牛客网偶然间翻到的一个大佬总结的有关C 面试题的一个专栏 该专刊囊括了C语言 C 操作系统 计算机网络 嵌入式 算法与数据结构 数据库等一系列知识点 总结出了高频面试考点 附有答案 共计273道 在这里给大家分享一下 链接 蒋豆芽面试题专
  • gitlab--基础--5.4--CICD--variables

    gitlab 基础 5 4 CICD variables 1 variables的保留字 1 1 CI 标识该job是在CI环境中执行 1 2 CI COMMIT REF NAME 用于构建项目的分支或tag 的名称 1 3 CI COMM
  • Could not find a package configuration file provided by "ignition-transport1"

    一 错误 按照Gazebo官网教程进行code introspection环境配置 在对代码进行编译时报错如下 二 错误原因 cmakelists txt里设置的ignition transport版本为ignition transport
  • 解决方案:fatal error: openssl/bio.h: 没有那个文件或目录

    出现报错如下 出现该错误的原因有两个 没有安装openssl或者libssl dev库 Libssl dev版本过高 需要降级 一 没有安装openssl或者libssl dev库 使用指令安装openssl 我的是已经安装完成了 所以再把
  • catch抛出异常finally还执行吗

    在面试的时候 经常会问到一些很基础的知识 比如有没接触过try catch finally 他们的执行顺序是怎么样的呢 你对此嗤之以鼻 这不是很简单吗 按照顺序执就行了 没错 可是如果每一块有return 并且有抛异常 扑捉异常的情况呢 估
  • 三步搞定ABAP DOI操作EXCEL

    前言 ABAP可以使用OLE与DOI两种方式实现操作EXCEL 使用OLE时 每个单元格的值和样式都需要写代码实现 特别是对于不规则的格式 代码量巨大 而DOI是从服务器已经上传的EXCEL模板中下载模板然后打开修改实现数据保存 当然 也可