SAP ABAP 导入excel表,导多个sheet

文章目录

注意事项

完整代码

SAPLZTEST_FGLHY01-主程序

js 复制代码
*******************************************************************
*   System-defined Include-files.                                 *
*******************************************************************
  INCLUDE LZTEST_FGLHY01TOP.                 " Global Declarations
  INCLUDE LZTEST_FGLHY01UXX.                 " Function Modules
  INCLUDE LALSMEXF01.                    " Function Modules

*******************************************************************
*   User-defined Include-files (if necessary).                    *
*******************************************************************
* INCLUDE LZTEST_FGLHY01F...                 " Subroutines
* INCLUDE LZTEST_FGLHY01O...                 " PBO-Modules
* INCLUDE LZTEST_FGLHY01I...                 " PAI-Modules
* INCLUDE LZTEST_FGLHY01E...                 " Events
* INCLUDE LZTEST_FGLHY01P...                 " Local class implement.
* INCLUDE LZTEST_FGLHY01T99.                 " ABAP Unit tests

LZTEST_FGLHY01TOP

js 复制代码
FUNCTION-POOL ZTEST_FGLHY01 MESSAGE-ID ME.                 "MESSAGE-ID ..

* INCLUDE LZTEST_FGLHY01D...                 " Local class definition

TYPE-POOLS: ole2.
TYPES: ty_d_itabvalue             TYPE zalsmex_tabline3-value,
       ty_t_itab                  TYPE zalsmex_tabline3   OCCURS 0,
       BEGIN OF ty_s_senderline,
         line(4096)               TYPE c,
       END OF ty_s_senderline,
       ty_t_sender                TYPE ty_s_senderline  OCCURS 0.
CONSTANTS:  gc_esc              VALUE '"'.

函数模块代码

js 复制代码
FUNCTION ZALSM_EXCEL_TO_INTERNAL_TABLE3 .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(FILENAME) LIKE  RLGRAP-FILENAME
*"     REFERENCE(I_BEGIN_COL) TYPE  I
*"     REFERENCE(I_BEGIN_ROW) TYPE  I
*"     REFERENCE(I_END_COL) TYPE  I
*"     REFERENCE(I_END_ROW) TYPE  I
*"     REFERENCE(I_WORKSHEET) TYPE  CHAR30 OPTIONAL
*"  TABLES
*"      INTERN STRUCTURE  ZALSMEX_TABLINE3
*"----------------------------------------------------------------------
  DATA: excel_tab     TYPE  ty_t_sender.
  DATA: ld_separator  TYPE  c.
  DATA: application TYPE  ole2_object,
        workbook    TYPE  ole2_object,
        range       TYPE  ole2_object,
        worksheet   TYPE  ole2_object.
  DATA: h_cell  TYPE  ole2_object,
        h_cell1 TYPE  ole2_object.
  DATA:
    ld_rc             TYPE i.
*   Rückgabewert der Methode "clipboard_export     "

* Makro für Fehlerbehandlung der Methods
  DEFINE m_message.
    CASE sy-subrc.
      WHEN 0.
      WHEN 1.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      WHEN OTHERS. RAISE upload_ole.
    ENDCASE.
  END-OF-DEFINITION.


* check parameters
  IF i_begin_row > i_end_row. RAISE inconsistent_parameters. ENDIF.
  IF i_begin_col > i_end_col. RAISE inconsistent_parameters. ENDIF.

* Get TAB-sign for separation of fields
  CLASS cl_abap_char_utilities DEFINITION LOAD.
  ld_separator = cl_abap_char_utilities=>horizontal_tab.

* open file in Excel
  IF application-header = space OR application-handle = -1.
    CREATE OBJECT application 'Excel.Application'.
    m_message.
  ENDIF.
  CALL METHOD OF application 'Workbooks' = workbook.
  m_message.
  CALL METHOD OF workbook 'Open' EXPORTING #1 = filename.
  m_message.
*  set property of application 'Visible' = 1.
*  m_message.
  IF i_worksheet IS NOT INITIAL .

    CALL METHOD OF application 'Worksheets' = worksheet
    EXPORTING
      #1 = i_worksheet.

    CALL METHOD OF worksheet 'Activate '.

  ENDIF .
  GET PROPERTY OF  application 'ACTIVESHEET' = worksheet.
  m_message.

* mark whole spread sheet
  CALL METHOD OF worksheet 'Cells' = h_cell
      EXPORTING #1 = i_begin_row #2 = i_begin_col.
  m_message.
  CALL METHOD OF worksheet 'Cells' = h_cell1
      EXPORTING #1 = i_end_row #2 = i_end_col.
  m_message.

  CALL METHOD  OF worksheet 'RANGE' = range
                 EXPORTING #1 = h_cell #2 = h_cell1.
  m_message.
  CALL METHOD OF range 'SELECT'.
  m_message.

* copy marked area (whole spread sheet) into Clippboard
  CALL METHOD OF range 'COPY'.
  m_message.

* read clipboard into ABAP
  CALL METHOD cl_gui_frontend_services=>clipboard_import
    IMPORTING
      data       = excel_tab
    EXCEPTIONS
      cntl_error = 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
      OTHERS     = 4.
  IF sy-subrc <> 0.
    MESSAGE a037(alsmex).
  ENDIF.

  PERFORM separated_to_intern_convert TABLES excel_tab intern
                                      USING  ld_separator.

* clear clipboard
  REFRESH excel_tab.
  CALL METHOD cl_gui_frontend_services=>clipboard_export
    IMPORTING
      data       = excel_tab
    CHANGING
      rc         = ld_rc
    EXCEPTIONS
      cntl_error = 1
*     ERROR_NO_GUI         = 2
*     NOT_SUPPORTED_BY_GUI = 3
      OTHERS     = 4.

* quit Excel and free ABAP Object - unfortunately, this does not kill
* the Excel process
  CALL METHOD OF application 'QUIT'.
  m_message.

* >>>>> Begin of change note 575877
* to kill the Excel process it's necessary to free all used objects
  FREE OBJECT h_cell.       m_message.
  FREE OBJECT h_cell1.      m_message.
  FREE OBJECT range.        m_message.
  FREE OBJECT worksheet.    m_message.
  FREE OBJECT workbook.     m_message.
  FREE OBJECT application.  m_message.
* <<<<< End of change note 575877
ENDFUNCTION.

引入标准的INCLUDE LALSMEXF01.

相关推荐
Knight_AL7 小时前
从 EasyExcel 到 Apache Fesod:Java Excel 处理生态的一次重构
java·apache·excel
泡海椒8 小时前
JQuick-Excel 多字段 TRANSFORM:让当前行字段、JContext 与展示列各归其位
开发语言·python·excel
泡海椒9 小时前
JQuick-Excel FORMULAS 实战:把计算规则留在工作簿中
excel
xiaolinudao1239 小时前
将多个 Excel 表格中的数据合并到单个表中|6 种实现方案全解析
java·前端·excel
reasonsummer11 小时前
【办公类-193-01】20261010 豆包写“带班表EXCEL”
excel·豆包
泡海椒14 小时前
JQuick-Excel 中 FORMULAS 与 TRANSFORM 的边界
excel
duangww20 小时前
QRFC的详细错误消息查看方式
abap·ewm·总分类帐科目xxx不一致
泡海椒20 小时前
JQuick-Excel 复杂 STYLE 实战:把报表样式拆成可维护的坐标规则
excel
百数平台2 天前
百数表格知识库配置指南:Excel/CSV 上传、表结构字段类型与 NL2SQL 查询全说明
excel
葡萄城技术团队2 天前
在 DSH 中直接查看和编辑 Excel:dsh-spreadjs-editor 开源插件发布
excel