ZTEST_SOURAV_EXCEL

本文介绍了一个使用 SAP GUI 在 ABAP 中集成并操作 Excel 文件的示例程序。该程序演示了如何打开指定路径的 Excel 文件,设置工作表的选择范围,并读取数据。此外,还提供了一个用于文件路径 F4 帮助的子程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

REPORT  ZTEST_SOURAV_EXCEL NO STANDARD PAGE HEADING.

DATA:
  OREF_CONTAINER   TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
  IREF_CONTROL     TYPE REF TO I_OI_CONTAINER_CONTROL,
  IREF_DOCUMENT    TYPE REF TO I_OI_DOCUMENT_PROXY,
  IREF_SPREADSHEET TYPE REF TO I_OI_SPREADSHEET,
  IREF_ERROR       TYPE REF TO I_OI_ERROR.

DATA:
  V_DOCUMENT_URL TYPE LENGTH 256,
  I_SHEETS       TYPE SOI_SHEETS_TABLE,
  WA_SHEETS      TYPE SOI_SHEETS,
  I_DATA         TYPE SOI_GENERIC_TABLE,
  WA_DATA        TYPE SOI_GENERIC_ITEM,
  I_RANGES       TYPE SOI_RANGE_LIST.


PARAMETERS:
  P_FILE TYPE  LOCALFILE OBLIGATORY,
  P_ROWS TYPE DEFAULT 100 OBLIGATORY"Rows (Maximum 65536)
  P_COLS TYPE DEFAULT 10 OBLIGATORY.    "Columns (Maximum 256)


INITIALIZATION.

  CALL METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
    IMPORTING
      CONTROL IREF_CONTROL
      ERROR   IREF_ERROR
*     retcode =
    .

  IF IREF_ERROR->HAS_FAILED 'X'.

    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'E'.
  ENDIF.

  CREATE OBJECT OREF_CONTAINER
    EXPORTING
*     parent                      =
      CONTAINER_NAME              'CONT'
*     style                       =
*     lifetime                    = lifetime_default
*     repid                       =
*     dynnr                       =
*     no_autodef_progid_dynnr     =
    EXCEPTIONS
      CNTL_ERROR                  1
      CNTL_SYSTEM_ERROR           2
      CREATE_ERROR                3
      LIFETIME_ERROR              4
      LIFETIME_DYNPRO_DYNPRO_LINK 5
      OTHERS                      6.
  IF SY-SUBRC <> 0.
    MESSAGE E001(00WITH 'Error while creating container'.
  ENDIF.

  CALL METHOD IREF_CONTROL->INIT_CONTROL
    EXPORTING
*     dynpro_nr            = SY-DYNNR
*     gui_container        = ' '
      INPLACE_ENABLED      'X'
*     inplace_mode         = 0
*     inplace_resize_documents = ' '
*     inplace_scroll_documents = ' '
*     inplace_show_toolbars    = 'X'
*     no_flush             = ' '
*     parent_id            = cl_gui_cfw=>dynpro_0
      R3_APPLICATION_NAME  'EXCEL CONTAINER'
*     register_on_close_event  = ' '
*     register_on_custom_event = ' '
*     rep_id               = SY-REPID
*     shell_style          = 1384185856
      PARENT               OREF_CONTAINER
*     name                 =
*     autoalign            = 'x'
    IMPORTING
      ERROR                IREF_ERROR
*     retcode              =
    EXCEPTIONS
      JAVABEANNOTSUPPORTED 1
      OTHERS               2.

  IF IREF_ERROR->HAS_FAILED 'X'.
    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'E'.
  ENDIF.

  CALL METHOD IREF_CONTROL->GET_DOCUMENT_PROXY
    EXPORTING
*     document_format    = 'NATIVE'
      DOCUMENT_TYPE  SOI_DOCTYPE_EXCEL_SHEET
*     no_flush       = ' '
*     register_container = ' '
    IMPORTING
      DOCUMENT_PROXY IREF_DOCUMENT
      ERROR          IREF_ERROR
*     retcode        =
    .

  IF IREF_ERROR->HAS_FAILED 'X'.
    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'E'.

  ENDIF.



AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
* To provide F4 help for the file

  PERFORM SUB_FILE_F4.


START-OF-SELECTION.

  CONCATENATE 'FILE://' P_FILE INTO V_DOCUMENT_URL.

  CALL METHOD IREF_DOCUMENT->OPEN_DOCUMENT
    EXPORTING
      DOCUMENT_TITLE 'Excel'
      DOCUMENT_URL   V_DOCUMENT_URL
*     no_flush       = ' '
      OPEN_INPLACE   'X'
*     open_readonly  = ' '
*     protect_document = ' '
*     onsave_macro   = ' '
*     startup_macro  = ''
*     user_info      =
    IMPORTING
      ERROR          IREF_ERROR
*     retcode        =
    .

  IF IREF_ERROR->HAS_FAILED 'X'.

    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'I'.
    LEAVE LIST-PROCESSING.

  ENDIF.



  CALL METHOD IREF_DOCUMENT->GET_SPREADSHEET_INTERFACE
    EXPORTING
      NO_FLUSH        ' '
    IMPORTING
      ERROR           IREF_ERROR
      SHEET_INTERFACE IREF_SPREADSHEET
*     retcode         =
    .

  IF IREF_ERROR->HAS_FAILED 'X'.

    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'I'.

    LEAVE LIST-PROCESSING.

  ENDIF.



  CALL METHOD IREF_SPREADSHEET->GET_SHEETS
    EXPORTING
      NO_FLUSH ' '
*     updating = -1
    IMPORTING
      SHEETS   I_SHEETS
      ERROR    IREF_ERROR
*     retcode  =
    .

  IF IREF_ERROR->HAS_FAILED 'X'.

    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'I'.

    LEAVE LIST-PROCESSING.

  ENDIF.

  LOOP AT I_SHEETS INTO WA_SHEETS.

    CALL METHOD IREF_SPREADSHEET->SELECT_SHEET
      EXPORTING
        NAME  WA_SHEETS-SHEET_NAME
*       no_flush = ' '
      IMPORTING
        ERROR IREF_ERROR
*       retcode  =
      .

    IF IREF_ERROR->HAS_FAILED 'X'.
      EXIT.
*      call method iref_error->raise_message
*        exporting
*          type = 'E'.

    ENDIF.

    CALL METHOD IREF_SPREADSHEET->SET_SELECTION
      EXPORTING
        TOP     1
        LEFT    1
        ROWS    P_ROWS
        COLUMNS P_COLS.

    CALL METHOD IREF_SPREADSHEET->INSERT_RANGE
      EXPORTING
        NAME     'Test'
        ROWS     P_ROWS
        COLUMNS  P_COLS
        NO_FLUSH ''
      IMPORTING
        ERROR    IREF_ERROR.
    IF IREF_ERROR->HAS_FAILED 'X'.
      EXIT.
*      call method iref_error->raise_message
*        exporting
*          type = 'E'.

    ENDIF.

    REFRESH I_DATA.

    CALL METHOD IREF_SPREADSHEET->GET_RANGES_DATA
      EXPORTING
*       no_flush = ' '
        ALL      'X'
*       updating = -1
*       rangesdef =
      IMPORTING
        CONTENTS I_DATA
        ERROR    IREF_ERROR
*       retcode  =
      CHANGING
        RANGES   I_RANGES.

* Remove ranges not to be processed else the data keeps on adding up
    CALL METHOD IREF_SPREADSHEET->DELETE_RANGES
      EXPORTING
        RANGES I_RANGES.
    DELETE I_DATA WHERE VALUE IS INITIAL OR VALUE SPACE.
    ULINE.
    WRITE:/1 WA_SHEETS-SHEET_NAME COLOR 3.
    ULINE.
    LOOP AT I_DATA INTO WA_DATA.
      WRITE:(50WA_DATA-VALUE.

      AT END OF ROW.

        NEW-LINE.

      ENDAT.

    ENDLOOP.

  ENDLOOP.

  CALL METHOD IREF_DOCUMENT->CLOSE_DOCUMENT
*  EXPORTING
*    do_save     = ' '
*    no_flush    = ' '
    IMPORTING
      ERROR IREF_ERROR
*     has_changed =
*     retcode     =
    .

  IF IREF_ERROR->HAS_FAILED 'X'.
    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'I'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  CALL METHOD IREF_DOCUMENT->RELEASE_DOCUMENT
*  EXPORTING
*    no_flush = ' '
    IMPORTING
      ERROR IREF_ERROR
*     retcode  =
    .

  IF IREF_ERROR->HAS_FAILED 'X'.
    CALL METHOD IREF_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE 'I'.

    LEAVE LIST-PROCESSING.

  ENDIF.



*&---------------------------------------------------------------------*
*&      Form  SUB_FILE_F4
*&---------------------------------------------------------------------*
*       F4 help for file path
*----------------------------------------------------------------------*
FORM SUB_FILE_F4 .
  DATA:
    L_DESKTOP  TYPE STRING,
    L_I_FILES  TYPE FILETABLE,
    L_WA_FILES TYPE FILE_TABLE,
    L_RCODE    TYPE INT4,
    L_ACTION   TYPE I.

* Finding desktop
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
    CHANGING
      DESKTOP_DIRECTORY    L_DESKTOP
    EXCEPTIONS
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      NOT_SUPPORTED_BY_GUI 3
      OTHERS               4.
  IF SY-SUBRC <> 0.
    L_DESKTOP 'C:\'.
  ENDIF.

* Update View
  CALL METHOD CL_GUI_CFW=>UPDATE_VIEW
    EXCEPTIONS
      CNTL_SYSTEM_ERROR 1
      CNTL_ERROR        2
      OTHERS            3.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            '文件选择'
      DEFAULT_EXTENSION       '.xls'
*     default_filename        =
      FILE_FILTER             'Excel(*.xls;*.xlsx)|*.XLSX;*.XLS;'
*     with_encoding           =
      INITIAL_DIRECTORY       L_DESKTOP
*     multiselection          =
    CHANGING
      FILE_TABLE              L_I_FILES
      RC                      L_RCODE
      USER_ACTION             L_ACTION
*     file_encoding           =
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED 1
      CNTL_ERROR              2
      ERROR_NO_GUI            3
      NOT_SUPPORTED_BY_GUI    4
      OTHERS                  5.

  IF L_ACTION AND SY-SUBRC 0.
    READ TABLE L_I_FILES INDEX INTO L_WA_FILES.
    IF SY-SUBRC 0.
      P_FILE L_WA_FILES-FILENAME.
    ENDIF.
  ENDIF.
ENDFORM.                    " SUB_FILE_F4
好的,以下是在 SAP ABAP 中使用 OData 过滤语句来过滤两个参数的示例代码,其中使用了 SEGW (SAP Gateway Service Builder) 来创建实体集合: 1. 在 SEGW 中创建实体集合 首先,在 SEGW 中创建一个实体集合,例如名为 ztest02Set 的实体集合,其中包含有关测试信息的字段,例如 Id 和 Ifno。 2. 在实体集合中添加查询方法 在实体集合中添加一个查询方法,例如名为 GetTestInfoByFilter 的方法,用于根据 Id 和 Ifno 这两个参数来过滤出符合条件的测试信息。 3. 在查询方法中添加过滤语句 在查询方法的源代码中,添加以下过滤语句来过滤两个参数: ``` lt_test_info = lt_test_info WHERE ( Id EQ @iv_id ) AND ( Ifno EQ @iv_ifno ). ``` 其中,lt_test_info 是包含所有测试信息的内部表,iv_id 和 iv_ifno 是输入参数,表示要过滤的 Id 和 Ifno。 4. 在前端应用中调用查询方法 在前端应用中,使用以下代码来调用查询方法并获取符合条件的测试信息: ``` var sUrl = "/sap/opu/odata/SAP/ZTEST01_SRV/GetTestInfoByFilter"; sUrl += "?$filter=Id eq '00000858' and Ifno eq 'KUZI'"; var oModel = new sap.ui.model.odata.ODataModel(sUrl, true); oModel.read("/ztest02Set", { success: function(oData) { // 处理返回的测试信息 } }); ``` 在上述代码中,我们使用 sap.ui.model.odata.ODataModel 类来创建 OData 模型,并使用 read 方法来调用 GetTestInfoByFilter 方法,并将过滤语句作为参数传递给 sUrl 变量。最后,我们使用 success 回调函数来处理返回的测试信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值