SAP ABAP基础语法-Excel上传(十)

EXCEL BDS模板上传及赋值

上传模板事务代码:OAER

l  功能代码:向EXCEL模板中写入数据示例代码如下

REPORT  ZEXCEL_DOI.
“doi type pools
TYPE-POOLS: soi.
*SAP Desktop Office Integration Interfaces
DATA: container TYPE REF TO cl_gui_custom_container,
      control TYPE REF TO i_oi_container_control,
      document TYPE REF TO i_oi_document_proxy,
      spreadsheet TYPE REF TO i_oi_spreadsheet,
      error TYPE REF TO i_oi_error,
      errors TYPE REF TO i_oi_error OCCURS 0 WITH HEADER LINE.
*dynpro fields
CONTROLS: exceldata TYPE TABLEVIEW USING SCREEN 0100.
DATA: tablename(10),ok_code(15),
      save_ok(15),
      row(4),column(4),data(39).
*spreadsheet interface structures of the selected R/3 table
DATA: cellitem TYPE soi_generic_item,
      rangeitem TYPE soi_range_item,
      ranges TYPE soi_range_list,
      excel_input TYPE soi_generic_table,
      excel_input_wa TYPE soi_generic_item,
      initialized(1),
      retcode TYPE soi_ret_string.
*screen fields
SET SCREEN 100.
INCLUDE ZEXCEL_DOI_STATUS_0100O01.
*&———————————————————————*
*&      Module  USER_COMMAND_0100  INPUT
*&———————————————————————*
*       text
*———————————————————————-*
MODULE USER_COMMAND_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
  WHEN ‘BACK’.
    SET SCREEN 0.
  WHEN ‘OUTPUT’.
    DATA: fields_table TYPE TABLE OF rfc_fields,
          tabname TYPE x030l-tabname,
          ret TYPE i VALUE 0.
    CHECK NOT tablename IS INITIAL.
    tabname = tablename.
    DATA: dref TYPE REF TO data,
          dref_it TYPE REF TO data,
          len_table TYPE i,
          len_excel_len TYPE i.
    FIELD-SYMBOLS: <tablewa> TYPE any,
                   <it_table> TYPE any table.
    CATCH SYSTEM-EXCEPTIONS create_data_unknown_type = 1
                            OTHERS = 2.
      CREATE DATA dref TYPE (tabname).
      CREATE DATA dref_it TYPE TABLE OF (tabname).
    ENDCATCH.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    ASSIGN: dref->* TO <tablewa>,
            dref_it->* TO <it_table>.
    DATA: count TYPE i.
    CLEAR count.
    DATA: BEGIN OF la_row,
            row TYPE c LENGTH 500,
          END OF la_row,
          excel_table LIKE TABLE OF la_row,
          myrow TYPE c LENGTH 500.
    REFRESH excel_table.
    SELECT * INTO TABLE <it_table>
             FROM (tabname).
    “create an excel range for data
    DATA: rows_number TYPE i,
          columns_number TYPE i.
    CALL FUNCTION ‘RFC_GET_STRUCTURE_DEFINITION’
     EXPORTING
          tabname          = tabname
     TABLES
          fields           = fields_table
     EXCEPTIONS
          table_not_active = 1
          OTHERS           = 2.
    DESCRIBE TABLE fields_table LINES columns_number.
    DESCRIBE TABLE <it_table> LINES rows_number.
    CALL METHOD spreadsheet->insert_range_dim
                  EXPORTING name = ‘SAP_Table’
                            top  = ‘2′
                            left = ‘2′
                            rows = rows_number
                            no_flush = ‘X’
                            columns = columns_number
                  IMPORTING error = errors.
    APPEND errors.
    CALL METHOD spreadsheet->set_color
                  EXPORTING rangename = ‘SAP_Table’
                            back = ‘50′
                            front = ‘2′
                            no_flush = ‘X’
                  IMPORTING error = errors.
    APPEND errors.
    “Create range for comments
    CALL METHOD spreadsheet->insert_range_dim
                  EXPORTING name = ‘SAP_Comments’
                            top  = ‘2′
                            left = ‘1′
                            rows = rows_number
                            no_flush = ‘X’
                            columns = 1
                  IMPORTING error = errors.
    APPEND errors.
    CALL METHOD spreadsheet->set_color
                  EXPORTING rangename = ‘SAP_Comments’
                            back = ‘25′
                            front = ‘2′
                            no_flush = ‘X’
                  IMPORTING error = errors.
    APPEND errors.
    DATA: title TYPE c LENGTH 30.
    REFRESH:ranges,excel_input.
    rangeitem-name = ‘SAP_Comments’.
    rangeitem-columns = 1.
    rangeitem-rows = 1.
    APPEND rangeitem TO ranges.
    excel_input_wa-column = 1.
    excel_input_wa-row = 1.
    CONCATENATE ‘R/3 table’ tabname ‘- comments’ INTO title
                            SEPARATED BY space.
    excel_input_wa-value = title.
    APPEND excel_input_wa TO excel_input.
    CALL METHOD spreadsheet->set_ranges_data
                  EXPORTING ranges = ranges
                            contents = excel_input
                  IMPORTING error = errors.
    APPEND errors.
    “transfer R/3 table data into excel range
    CALL METHOD spreadsheet->insert_one_table
                  EXPORTING data_table = <it_table>
                            ddic_name  = tabname
                            rangename  = ‘SAP_Table’
                            no_flush   = ‘X’
                            wholetable = ‘X’
                  IMPORTING error = errors.
    APPEND errors.
    “protect the R/3 data against input
    CALL METHOD spreadsheet->fit_widest
                  EXPORTING name = space
                            no_flush = ‘X’.
    CALL METHOD spreadsheet->protect_range
                  EXPORTING name = ‘SAP_Table’
                            protect = ‘X’
                            no_flush = ‘X’
                  IMPORTING error = errors.
    APPEND errors.
    “no flush automation queue
    CALL METHOD control->set_focus
            EXPORTING no_flush = ‘ ’
            IMPORTING error = errors.
    APPEND errors.
    LOOP AT errors.
      CALL METHOD errors->raise_message
                  EXPORTING type = ‘E’.
    ENDLOOP.
    FREE errors.
    REFRESH:excel_input,ranges.
    CLEAR :excel_input_wa,rangeitem.
  ENDCASE.
ENDMODULE.                 “ USER_COMMAND_0100  INPUT
*&———————————————————————*
*&      Module  CREATE_BASIC_OBJECTS  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
MODULE CREATE_BASIC_OBJECTS OUTPUT.
  CHECK initialized IS INITIAL.
  “first get doi i_oi_container_control interface
  CALL METHOD c_oi_container_control_creator=>get_container_control
              IMPORTING control = control
                        error   = error.
  “check no errors occured
  CALL METHOD error->raise_message EXPORTING type = ‘E’.
  “create a control container as defined in dynpro 0100
  CREATE OBJECT container
         EXPORTING container_name = ‘CONTAINER’.
  “initialize the SAP DOI container,tell it to run in the container
  “specified above and tell it to run excel inplace
  CALL METHOD control->init_control
        EXPORTING r3_application_name = ‘R/3 Basis’
                  inplace_enabled = ”
                  inplace_scroll_documents = ”
                  parent = container
                  register_on_close_event = ‘X’
                  register_on_custom_event = ‘X’
                  no_flush = ‘X’
        IMPORTING error = errors.
* save error object in collection
  APPEND errors.
* ask the SAP DOI container for a i_oi_document_proxy for Exel
  CALL METHOD control->get_document_proxy
          EXPORTING document_type = ‘Excel.Sheet’
                    no_flush = ‘X’
          IMPORTING document_proxy = document
                    error = errors.
*and then create a new Excel Sheet
  CALL METHOD document->create_document
              EXPORTING open_inplace = ”
                        document_title = ‘R/3 table contents in Excel’
                        no_flush = ‘X’
              IMPORTING error = errors.
  APPEND errors.
* check if our document proxy can serve a spread sheet interface
  DATA: has TYPE i.
  CALL METHOD document->has_spreadsheet_interface
             EXPORTING no_flush = ‘X’
             IMPORTING is_available = has
                       error = errors.
  APPEND errors.
  CALL METHOD document->get_spreadsheet_interface
              EXPORTING no_flush = ‘ ’
              IMPORTING sheet_interface = spreadsheet
                        error = errors.
  APPEND errors.
* now loop through error collection because
* Get_spreadsheet_interface flushed and synchronized
* the automation queue !
  LOOP AT errors.
    CALL METHOD errors->raise_message
                    EXPORTING  type     = ‘E’.
  ENDLOOP.
  initialized = ‘X’.
ENDMODULE.                 “ CREATE_BASIC_OBJECTS  OUTPUT
l  打开excel模板示例代码如下:
  METHODS: open_excel_template IMPORTING                              im_clsnam TYPE sbdst_classname                                         im_clstyp TYPE sbdst_classtype                                   im_objkey TYPE sbdst_object_key                                  im_desc   TYPE char255,   “打开报表模板
*———————————————-*
* METHOD open_excel_template                   *
* 打开excel模板
*———————————————-*
  METHOD open_excel_template.
    DATA: locint_signature   TYPE sbdst_signature,
          locint_uris        TYPE sbdst_uri,
          locwa_signature    LIKE LINE OF locint_signature,
          locwa_uris         LIKE LINE OF locint_uris.
*   Create object for cl_bds_document_set
    CREATE OBJECT r_document.
*   Get Document with URL
    locwa_signature-prop_name  = ‘DESCRIPTION’.
*   Description of the table template in OAOR
    locwa_signature-prop_value = im_desc.
    APPEND locwa_signature TO locint_signature.
    CALL METHOD r_document->get_with_url
      EXPORTING
        classname       = im_clsnam
        classtype       = im_clstyp
        object_key      = im_objkey
      CHANGING
        uris            = locint_uris
        signature       = locint_signature
      EXCEPTIONS
        nothing_found   = 1
        error_kpro      = 2
        internal_error  = 3
        parameter_error = 4
        not_authorized  = 5
        not_allowed     = 6.
    IF sy-subrc NE 0.
      MESSAGE ‘Error Retrieving Document’ TYPE ‘E’.
    ENDIF.
*   Create container control
    CALL METHOD c_oi_container_control_creator=>get_container_control
      IMPORTING
        control = r_control
        error   = r_error.
    IF r_error->has_failed = ‘X’.
      CALL METHOD c_oi_errors=>raise_message
        EXPORTING
          type = ‘E’.
    ENDIF.
* Initialize Custom Control
    CREATE OBJECT r_container
      EXPORTING
        container_name = ‘TAB_EXCEL’. “Custom Control Name
    CALL METHOD r_control->init_control
      EXPORTING
        r3_application_name      = ‘EXCEL INPLACE BDS’
        inplace_enabled          = abap_false
        inplace_scroll_documents = abap_true
        parent                   = r_container
      IMPORTING
        error                    = r_error.
    IF r_error->has_failed = ‘X’.
      CALL METHOD c_oi_errors=>raise_message
        EXPORTING
          type = ‘E’.
    ENDIF.
* Create object for cl_bds_document_set
    CREATE OBJECT r_document.
    READ TABLE locint_uris INTO locwa_uris INDEX 1.
    CALL METHOD r_control->get_document_proxy
      EXPORTING
        document_type  = ‘Excel.Sheet’
      IMPORTING
        document_proxy = r_proxy
        error          = r_error.
    IF r_error->has_failed = ‘X’.
      CALL METHOD c_oi_errors=>raise_message
        EXPORTING
          type = ‘E’.
    ENDIF.
*   Open Document
    CALL METHOD r_proxy->open_document
      EXPORTING
        document_url     = locwa_uris-uri
        open_inplace     = abap_false
        protect_document = abap_false “Protect Document initially
      IMPORTING
        error            = r_error.
    IF r_error->has_failed = ‘X’.
      CALL METHOD c_oi_errors=>raise_message
        EXPORTING
          type = ‘E’.
    ENDIF.
*   Get Excel Interface
    CALL METHOD r_proxy->get_spreadsheet_interface
      IMPORTING
        sheet_interface = r_excel
        error           = r_error.
    IF r_error->has_failed = ‘X’.
      CALL METHOD c_oi_errors=>raise_message
        EXPORTING
          type = ‘E’.
    ENDIF.
    CALL METHOD r_proxy->get_spreadsheet_interface
        IMPORTING
                sheet_interface = r_handle.
  ENDMETHOD.
ENDCLASS.
l  逐个CELL输入数据的示例代码如下:
  fill_cell IMPORTING im_x TYPE i
                      im_y TYPE i
                      im_value TYPE char255,      “填充单元格
———————————————-*
* METHOD fill_cell                             *
* 向excel的单元格中插入数据
*———————————————-*
  METHOD fill_cell.
    DATA: lv_columns TYPE i,
          lv_rows TYPE i.
    lv_columns = 1.
    lv_rows = 1.
    CALL METHOD r_handle->insert_range_dim
         EXPORTING
           NAME = ‘cell’
           NO_FLUSH = ‘X’
           TOP = im_x
           LEFT = im_y
           ROWS = lv_rows
           COLUMNS = lv_columns
         IMPORTING
           error = r_error.
    DATA: lt_ran TYPE soi_range_list,
          lt_cont TYPE soi_generic_table,
          la_ran LIKE LINE OF lt_ran,
          la_cont LIKE LINE OF lt_cont.
    la_ran-name = ‘cell’.
    la_ran-columns = lv_columns.
    la_ran-rows = lv_rows.
    APPEND la_ran TO lt_ran.
    la_cont-column = 1.
    la_cont-row = 1.
    la_cont-value = im_value.
    APPEND la_cont TO lt_cont.
    CALL METHOD r_handle->set_ranges_data
      EXPORTING ranges = lt_ran
                contents = lt_cont
      IMPORTING
                error = r_error.
    CALL METHOD r_handle->fit_widest
         EXPORTING
           name  = space
           no_flush = ‘X’.
  ENDMETHOD.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/132975.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

arduino 简易智能花盆

编辑器&#xff1a;arduino IDE 主板&#xff1a;arduino uno 传感器&#xff1a; 0.96寸的OLED屏&#xff08;四脚&#xff09; 声音模块 土壤温湿度模块 DS18B20温度模块&#xff08;这里用到防水的&#xff09; 光敏电阻模块&#xff08;买成三脚的了只能显示高低&#x…

软件测试的终点是“测试开发”吗?

前言 在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位&#xff0c;即使是做业务测试&#xff0c;那么你的title也是测开。 所以想聊一聊测开的看法&#xff0c;但不代表这是正确的看法&#xff0c;仅供参考。 没来阿里之前我对测开的看法 一直以为专职做自…

软件测试金融项目,在测试的时候一定要避开的一些雷区

软件测试金融项目需要格外谨慎和专注&#xff0c;因为这些项目通常涉及大量的交易、用户隐私和其他敏感信息。以下是一些软件测试金融项目时需要关注的方面&#xff1a; 1. 数据保护 在测试金融项目时&#xff0c;必须确保用户数据和投资信息得到保护。测试人员必须确保测试环…

我干了8年测试,告诉你现在软件测试还能不能找到工作!

观点&#xff1a;如果你还是以前的思维来学习测试&#xff0c;那你肯定是找不到工作&#xff01; 我做测试工作有将近8年的时间&#xff0c;蚂蚁金服做过2年&#xff0c;因为加班太多离职了。目前在一家国企上市公司&#xff0c;一年能拿三四十个左右&#xff0c;对比头部互联…

信息系统“好用”的标准探讨

数字化转型建设的关键不在建设信息系统。这是为了避免走信息化建设的老路——业务和信息化两张皮&#xff0c;寄希望信息系统解决业务问题。在数字化转型建设中&#xff0c;信息系统仍然是重要抓手和显性成果&#xff0c;是企业业务和数据的承载平台&#xff0c;也是IT厂商向客…

李峋同款的C语言动态爱心代码来了,彩色闪动,附源码

1.前言 最近一部电视剧《点燃我&#xff0c;温暖你》可火啦&#xff0c;大家纷纷在搞男主阿瑟的同款爱心代码&#xff0c;但是虽然网上有它的源码&#xff0c;但都不是 C 语言的&#xff0c;看不懂。我看了一下这个视频&#xff0c;大致分析了一下它的运行过程。用语言描述一下…

【C++】C++11常用特性梳理

C11特性梳理 1. 列表初始化2. auto & decltype3. 右值引用3.1. 左右值引用比较3.2. 右值引用的意义3.3. 万能引用与完美转发3.4. 移动构造与移动赋值 4. default & delete5. 可变参数模板6. push_back 与 emplace_back7. lambda表达式7.1. 捕捉列表 8. function包装器8…

(一)QML加载离线地图+标记坐标点

1、实现效果 加载离线地图瓦片、鼠标拖拽、滚轮缩放在地图上固定坐标位置标注地名 &#xff08;一&#xff09;QML加载离线地图标记坐标点&#xff1a;MiniMap-mini 2、实现方法 2.1、使用工具下载离线地图 不废话&#xff0c;直接搬别人的砖&#xff0c;曰&#xff1a;他山…

VirtualBox网络地址转换(NAT),宿主机无法访问虚拟机的问题

问题&#xff1a;NAT模式下&#xff0c;默认只能从内访问外面&#xff0c;而不能从外部访问里面&#xff0c;所以只能单向ping通&#xff0c;虚拟机的ip只是内部ip。 PS&#xff1a;桥接则是与主机公用网卡&#xff0c;有独立的外部ip。 解决&#xff1a;NAT模式可以通过配置 …

好物周刊#30:Github 上大学

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Fighting Design 一款灵活、优质的组件库&#xff0c;可在 vue3 应用程…

【api_fox】ApiFox简单操作

1、get和post请求的区别&#xff1f;2、接口定义时的传参格式&#xff1f;3、保存接口文档 apifox当中接口文档的设计和接口用例的执行是分开的。 1、get和post请求的区别&#xff1f; 2、接口定义时的传参格式&#xff1f; 3、保存接口文档 就生成如下的接口文档。

C语言实现编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n

完整代码&#xff1a; /*编写一个函数&#xff0c;输入n为偶数时&#xff0c;调用函数求1/21/4...1/n,当输入n为奇数时&#xff0c; 调用函数1/11/3...1/n */ #include<stdio.h>//n为偶数 double Odd(int n){double sum0;//i为2&#xff0c;4&#xff0c;6....for (int …

linux_day02

1、链接&#xff1a;LN 一个点表示当前工作目录&#xff0c;两个点表示上一层工作目录&#xff1b; 目录的本质&#xff1a;文件&#xff08;该文件储存目录项&#xff0c;以链表的形式链接&#xff0c;每个结点都是目录项&#xff0c;创建文件相当于把目录项添加到链表中&…

在Spring Boot中使用JTA实现对多数据源的事务管理

了解事务的都知道&#xff0c;在我们日常开发中单单靠事务管理就可以解决绝大多数问题了&#xff0c;但是为啥还要提出JTA这个玩意呢&#xff0c;到底JTA是什么呢&#xff1f;他又是具体来解决啥问题的呢&#xff1f; JTA JTA&#xff08;Java Transaction API&#xff09;是…

C语言--青蛙跳台阶【内容超级详细】

今天与大家分享一下递归的经典题目--青蛙跳台阶问题。 一.引子 电影《少年班》&#x1f357;中的老师在全国各地寻找天才少年时&#xff0c;就问了一个这样的问题&#xff0c;有20阶台阶&#xff0c;每次只能上一阶或两阶&#xff0c;总共有多少种上法&#xff1f;这个少年王…

【LeetCode刷题日志】138.随机链表的复制

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…

WebSphere Liberty 8.5.5.9 (一)

WebSphere Liberty 8.5.5.9 (一) 安装 1. 从官网下载 WebSphere Liberty 8.5.5.9 2. 解压 解压到 D:\wlp-webProfile7-java8-8.5.5.93. 启动 D:\wlp-webProfile7-java8-8.5.5.9\wlp\bin>server start 正在启动服务器 defaultServer。 服务器 defaultServer 已启动。4. …

让你的win10/win11系统变得不再卡顿,优雅草伊凡整理-长期更新-如何让windows操作系统不用老是重装在不断的更新中依然保持流畅运行

概述 如题&#xff1a;让你的win10/win11系统变得不再卡顿&#xff0c;优雅草伊凡整理-长期更新-如何让windows操作系统不用老是重装在不断的更新中依然保持流畅运行 本文长期更新&#xff0c;本次更新2023年11月8日&#xff01; 很多时候 我们的win10win11系统不管再怎么关…

【Python】20大报告生成词云

这个我其实写过一篇类似的博客&#xff0c;但是那个的文件对象是.csv&#xff0c;对应到.docx文件的话&#xff0c;就不太适用了。如下&#xff1a; Python生成词云-CSDN博客 代码&#xff1a; import jieba import os import wordcloud import numpy as np from PIL import…

自动化测试框架Playwright安装以及使用

最近&#xff0c;微软开源了一个非常强大的自动化项目叫 playwright-python 它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行&#xff0c;并提供了同步、异步的 API&#xff0c;可以…