SAP将指定EXCEL工作SHEET的数据上传到内表

SAP将指定EXCEL工作SHEET的数据上传到内表

 本文描述了一个SAP ABAP类方法upload_excel_2internaltab,用于将Excel文件数据上传到内部表。主要功能包括:

  1. 验证Excel行列范围有效性,若起始值大于结束值则抛出异常
  2. 检查文件是否存在,支持直接指定路径或通过文件对话框选择
  3. 使用OLE自动化技术操作Excel,包括打开工作簿、选择工作表、复制指定单元格范围数据
  4. 通过剪贴板将Excel数据导入ABAP内部表,调用标准函数进行格式转换
  5. 包含完善的异常处理机制,针对文件不存在、操作失败等情况抛出定制异常类ZCX_AB_K2_SERVICE的相应错误
  6. 最后释放所有OLE对象以关闭Excel进程

该方法实现了Excel与SAP系统间的数据交互,适用于需要批量导入数据的业务场景。

class ZCX_AB_K2_SERVICE definition
  public
  inheriting from CX_STATIC_CHECK
  create public .

public section.

  interfaces IF_T100_DYN_MSG .
  interfaces IF_T100_MESSAGE .

  constants:
    begin of PROCESSID_NOT_CONFIGED,
      msgid type symsgid value 'ZMSG_AB_I02',
      msgno type symsgno value '001',
      attr1 type scx_attrname value 'MV_APTYP',
      attr2 type scx_attrname value 'MV_BUKRS',
      attr3 type scx_attrname value '',
      attr4 type scx_attrname value '',
    end of PROCESSID_NOT_CONFIGED .
  constants:
    begin of PROCESSID_NOT_UNIQUE,
      msgid type symsgid value 'ZMSG_AB_I02',
      msgno type symsgno value '016',
      attr1 type scx_attrname value '',
      attr2 type scx_attrname value '',
      attr3 type scx_attrname value '',
      attr4 type scx_attrname value '',
    end of PROCESSID_NOT_UNIQUE .
  constants:
    begin of WRONG_COMPANY_CODE,
      msgid type symsgid value 'ZMSG_AB_I02',
      msgno type symsgno value '017',
      attr1 type scx_attrname value 'MV_BUKRS',
      attr2 type scx_attrname value '',
      attr3 type scx_attrname value '',
      attr4 type scx_attrname value '',
    end of WRONG_COMPANY_CODE .
  constants:
    begin of BEGIN_OVER_END,
      msgid type symsgid value 'ZMSG_AB_I02',
      msgno type symsgno value '023',
      attr1 type scx_attrname value '',
      attr2 type scx_attrname value '',
      attr3 type scx_attrname value '',
      attr4 type scx_attrname value '',
    end of BEGIN_OVER_END .
  constants:
    begin of UPLOAD_FILE_FAILED,
      msgid type symsgid value 'ZMSG_AB_I02',
      msgno type symsgno value '022',
      attr1 type scx_attrname value '',
      attr2 type scx_attrname value '',
      attr3 type scx_attrname value '',
      attr4 type scx_attrname value '',
    end of UPLOAD_FILE_FAILED .
  data MV_APTYP type ZE_APTYP .
  data MV_BUKRS type ZE_BUKRS .

  methods CONSTRUCTOR
    importing
      !TEXTID like IF_T100_MESSAGE=>T100KEY optional
      !PREVIOUS like PREVIOUS optional
      !MV_APTYP type ZE_APTYP optional
      !MV_BUKRS type ZE_BUKRS optional .

METHOD upload_excel_2internaltab.

    DATA: lt_excel_tab   TYPE tyt_send_line,
          lo_application TYPE ole2_object,
          lo_workbook    TYPE ole2_object,
          lo_worksheet   TYPE ole2_object,
          lo_cell        TYPE ole2_object,
          lo_cell_1      TYPE ole2_object,
          lo_range       TYPE ole2_object,
          lv_return_code TYPE i,
          lt_file_table  TYPE filetable.

    IF iv_begin_colomn > iv_end_colomn.
      "起止大于截止
      RAISE EXCEPTION TYPE zcx_ab_k2_service
        EXPORTING
          textid = zcx_ab_k2_service=>begin_over_end.
    ENDIF.

    IF iv_begin_row > iv_end_row.
      RAISE EXCEPTION TYPE zcx_ab_k2_service
        EXPORTING
          textid = zcx_ab_k2_service=>begin_over_end.
    ENDIF.

    IF iv_file_name IS NOT INITIAL.
      CALL METHOD cl_gui_frontend_services=>file_exist
        EXPORTING
          file                 = iv_file_name
        RECEIVING
          result               = DATA(lv_file_exist)
        EXCEPTIONS
          cntl_error           = 1
          error_no_gui         = 2
          wrong_parameter      = 3
          not_supported_by_gui = 4
          OTHERS               = 5.
      IF sy-subrc <> 0 OR lv_file_exist EQ abap_false.
        "文件不存在
        RAISE EXCEPTION TYPE zcx_ab_k2_service
          EXPORTING
            textid = zcx_ab_k2_service=>upload_file_failed.
      ELSE.
        DATA(lv_file_name) = iv_file_name.
      ENDIF.

    ELSE.
      CALL METHOD cl_gui_frontend_services=>get_desktop_directory
        CHANGING
          desktop_directory    = lv_file_name
        EXCEPTIONS
          cntl_error           = 1
          error_no_gui         = 2
          not_supported_by_gui = 3
          OTHERS               = 4.
      IF sy-subrc <> 0.
        RAISE EXCEPTION TYPE zcx_ab_k2_service
          EXPORTING
            textid = zcx_ab_k2_service=>upload_file_failed.
      ENDIF.

      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title            = CONV #( TEXT-001 )
          default_extension       = CONV #( TEXT-002 )
*         default_filename        = '上传模板'
          file_filter             = cl_gui_frontend_services=>filetype_excel
*         with_encoding           =
          initial_directory       = lv_file_name
          multiselection          = abap_false
        CHANGING
          file_table              = lt_file_table
          rc                      = lv_return_code
*         user_action             =
*         file_encoding           =
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
      IF sy-subrc <> 0.
        RAISE EXCEPTION TYPE zcx_ab_k2_service
          EXPORTING
            textid = zcx_ab_k2_service=>upload_file_failed.
      ELSE.
        lv_file_name = lt_file_table[ 1 ].
      ENDIF.

    ENDIF.

    CLASS cl_abap_char_utilities DEFINITION LOAD.
    DATA(lv_separator) = cl_abap_char_utilities=>horizontal_tab.

    IF lo_application-header = abap_false
      OR lo_application-handle = -1.
      CREATE OBJECT lo_application 'Excel.Application'.
    ENDIF.

    CALL METHOD OF lo_application 'Workbooks' = lo_workbook.

    "必须参考RLGRAP-FILENAME
    DATA(lv_excel_name) = CONV localfile( lv_file_name ).
    CALL METHOD OF lo_workbook 'Open' EXPORTING #1 = lv_file_name.

    IF iv_sheet_name IS INITIAL.
*  set property of application 'Visible' = 1.
      GET PROPERTY OF  lo_application 'ACTIVESHEET' = lo_worksheet.
    ELSE.
      CALL METHOD OF lo_application 'WORKSHEETS' = lo_worksheet
      EXPORTING #1 = iv_sheet_name.

      CALL METHOD OF lo_worksheet 'Activate'.
    ENDIF.

* mark whole spread sheet
    CALL METHOD OF lo_worksheet 'Cells' = lo_cell
        EXPORTING #1 = iv_begin_row #2 = iv_begin_colomn.

    CALL METHOD OF lo_worksheet 'Cells' = lo_cell_1
        EXPORTING #1 = iv_end_row #2 = iv_end_colomn.

    CALL METHOD  OF lo_worksheet 'RANGE' = lo_range
                   EXPORTING #1 = lo_cell #2 = lo_cell_1.

    CALL METHOD OF lo_range 'SELECT'.

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

* read clipboard into ABAP
    CALL METHOD cl_gui_frontend_services=>clipboard_import
      IMPORTING
        data                 = lt_excel_tab
      EXCEPTIONS
        cntl_error           = 1
        error_no_gui         = 2
        not_supported_by_gui = 3
        OTHERS               = 4.
    IF sy-subrc <> 0.
      RAISE EXCEPTION TYPE zcx_ab_k2_service
        EXPORTING
          textid = zcx_ab_k2_service=>upload_file_failed.
    ENDIF.

    IF lt_excel_tab IS NOT INITIAL.
      PERFORM separated_to_intern_convert IN PROGRAM saplalsmex
                                          TABLES lt_excel_tab rt_internal_table
                                          USING  lv_separator.

* clear clipboard
      REFRESH lt_excel_tab.
      CALL METHOD cl_gui_frontend_services=>clipboard_export
        IMPORTING
          data                 = lt_excel_tab
        CHANGING
          rc                   = lv_return_code
        EXCEPTIONS
          cntl_error           = 1
          error_no_gui         = 2
          not_supported_by_gui = 3
          OTHERS               = 4.
      IF sy-subrc NE 0.
        RAISE EXCEPTION TYPE zcx_ab_k2_service
          EXPORTING
            textid = zcx_ab_k2_service=>upload_file_failed.
      ENDIF.
    ENDIF.

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

* >>>>> Begin of change note 575877
* to kill the Excel process it's necessary to free all used objects
    FREE OBJECT lo_cell.
    FREE OBJECT lo_cell_1.
    FREE OBJECT lo_range.
    FREE OBJECT lo_worksheet.
    FREE OBJECT lo_workbook.
    FREE OBJECT lo_application.
* <<<<< End of change note 575877
  ENDMETHOD.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot(九十三):Springboot 整合cfx实现webservice接口

1 服务端 最近项目改造,有一些老项目接口协议是webservice soap1.1,这就需要我们提供webservice服务接口。在Spring Boot中整合CFX(CXF框架)以实现Web服务客户端与服务端的功能,可以分为几个步骤。下面我将详细介绍如何在Spring Boot中设置一个Web服务端点,使用Apache CX…

Triton server的部署、构建、backend插件机制整体介绍

目录 0 引言 1 什么是Trition inference server 2 Trition inference server部署 2.1 下载server 2.2 下载模型 2.3 实验 3 triton inference server的构建 3.1 build时候需要哪些repo 3.2 构建过程做了什么 3.3 构建体验 4 阅读readme整体了解下backend机制 4.1 什…

Paimon在各大公司生产实践和优化总结

这是一篇汇总和个人学习文章&#xff0c;主要目的是总结一下Paimon在各大公司的落地做一个学习笔记。 本文的主要内容是关于Paimon在各大公司包括Vivo、Shopee、阿里、抖音等公司的落地实践&#xff0c;文末有文章来源地址&#xff0c;内容大概分为几个部分&#xff1a; 1.引…

简析自动驾驶产业链及其核心技术体系

一、自动驾驶产业链 自动驾驶产业链可以细分为感知层、决策层、执行层以及通信层等多个环节。上游部分主要包括提供环境感知所需的各种传感器&#xff08;如激光雷达、毫米波雷达、摄像头等&#xff09;、高精度地图服务、定位系统以及其他相关硬件设备&#xff1b;中游涵盖了…

第一节 布局与盒模型-Flex与Grid布局对比

一、核心特性对比​​ 1. ​​布局维度​​ ​​Flex 布局​​&#xff1a; ​​一维布局​​&#xff1a;仅支持单方向&#xff08;水平或垂直&#xff09;的排列&#xff0c;通过 flex-direction 控制主轴方向&#xff08;row 或 column&#xff09;。​​适用场景​​&…

国产USRP X410 PRO/PRO+(相参版):宽频段、大带宽、多通道的4×4高性能软件无线电设备

国产USRP X410 PRO/PRO(相参版)高性能软件无线电&#xff0c;作为USRP X410的进阶版本&#xff0c;X410 PRO/PRO核心均升级为Xilinx XCZU48DR FPGA芯片&#xff0c;显著提升了信号处理能力。平台延续了Xilinx Zynq UltraScale RFSoC的先进架构&#xff0c;集成四核ARM处理器及高…

Mac电脑-Office 2024 长期支持版(Excel、Word、PPT)

Office 2024 mac 是一款专为苹果电脑用户设计的高性能、高安全性的办公软件套装 集成了Word、Excel、PowerPoint、Outlook等经典应用&#xff0c;为用户提供了一站式的办公解决方案。 不仅继承了Office系列一贯的卓越性能&#xff0c;还在功能性和用户体验上进行了全面升级。…

vue2通过leaflet实现图片点位回显功能

需求&#xff1a;在图片上标点了&#xff0c;需要根据标记点在图片上进行回显功能&#xff0c;并且不会根据窗口大小导致标记点移位 1.效果 2.下载插件 用到的是leaflet插件&#xff1a;一个交互式地图 JavaScript 库&#xff0c;我下载是 "leaflet": "^1.9.4&…

OmniDocBench:一键评测PDF解析算法

绝大多数文档格式都能无损转换至PDF&#xff0c;解决了PDF解析&#xff0c;也就相当于解决了绝大多数文档的解析。所以&#xff0c;PDF解析算法是文档服务的基石技术。 PDF解析算法目前有两类技术路线 pipeline方法&#xff0c;整合layout analysis, OCR, formula/table reco…

[按键精灵安卓/ios脚本插件开发] 遍历获取LuaAuxLib函数库命令辅助工具

LuaAuxLib库 LuaAuxLib是按键精灵所有内置命令所在的库文件&#xff0c;有多种方式来获取LuaAuxLib库下的函数命令&#xff0c;例如反编译按键精灵手机端库文件等。这里咱们来介绍一种浅显易懂的方式来获取&#xff0c;直接for循环遍历获取函数名。 ScanLuaAuxLib 我们写一个自…

深度学习和计算机视觉的关系的理解

深度学习和计算机视觉的关系 深度学习作为人工智能的重要分支&#xff0c;近年来在计算机视觉领域取得了革命性突破。计算机视觉的核心任务包括图像分类、目标检测、语义分割等&#xff0c;而深度学习通过神经网络模型自动学习图像特征&#xff0c;极大提升了这些任务的准确率…

springboot开发项目 SLF4J+Logback日志框架集成【最终篇】

在这篇文章之前&#xff0c;实际对于 springboot和SLF4JLogback日志框架的使用 我已经分享过3篇关于springboot 日志的文章了。为什么会在写这篇最终篇&#xff0c;因为 前3篇分享的关于springBoot框架日志的配置方案&#xff0c; 发现了一个问题&#xff1a;只有项目启动的时候…

phpstudy无法启动apache,80端口被占用,完美解决

phpstudy无法启动apache&#xff0c;80端口被占用&#xff0c;完美解决 解决方法一(最推荐) 依次点击网站-管理-修改 将端口由80改为81&#xff0c;再点击确认后即可重新启动apache。 需要注意的是&#xff0c;网站的访问由127.0.0.1变为127.0.0.1:81。默认是80的端口所以可以不…

Loggers 配置解析(log4j.xml)

Loggers 配置解析 我们通过下面的例子来理解 log4j 的 Loggers 配置是如何决定日志输出规则的。 <Loggers><!-- 根Logger&#xff1a;全局配置 --><Root level"debug"><AppenderRef ref"consoleAppender" level"info"/&g…

Java 大视界 -- Java 大数据在智能政务舆情监测与引导中的情感分析与话题挖掘技术(272)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

[NocoDB] 在局域网中调整Float类型显示精度的部署经验

在单位局域网环境中,NocoDB有效地连接MySQL数据库和前端服务,做为中间件很方便。然而,在实际应用中,我们也会遇到一些较为隐藏的设置问题,比如此次经历的 float 显示精度不匹配问题。 问题环境 实际数据库:MySQL,表中有 float 类型的数据 原始数据来源:Excel表格 数据转…

Dockerfile 常见指令详解

Dockerfile 是一个文本文件&#xff0c;包含了一系列用于构建 Docker 镜像的指令。以下是 Dockerfile 中常见指令的详细解释&#xff1a; 基础指令 1. FROM 指定基础镜像&#xff0c;必须为第一条指令&#xff08;注释除外&#xff09;。 FROM ubuntu:20.04 FROM python:3.…

InnoDB Cluster 与 NDB Cluster 对比及部署指南

InnoDB Cluster 与 NDB Cluster 对比及部署指南 一、核心区别对比 特性InnoDB ClusterNDB Cluster存储引擎InnoDBNDB (内存优先)架构设计基于Group Replication分布式架构(数据节点管理节点SQL节点)一致性模型最终一致性/强一致性强一致性数据持久化磁盘存储为主内存存储为主…

PySide环境配置及工具使用

文章目录 [toc]1 概述1.1 PySide 能做什么&#xff1f;1.2 PySide 的优点1.3 PySide 的缺点1.4 示例代码&#xff08;简单窗口&#xff09; 2 环境准备2.1 安装必要软件2.2 修改 pip 源 3 PySide23.1 环境要求3.2 配置PySide23.3 工具配置 4 PySide64.1 环境4.2 配置PySide64.3…

数据标注师学习内容

目录 文本标注词性标注实体标注 图像标注语音标注 文本标注 词性标注 第一篇 第二篇 实体标注 点击这里 关系标注 事件标注 意图标注 关键词标注 分类标注 问答标注 对话标注 图像标注 拉框标注 关键点标注 2D标注 3D标注 线标注 目标跟踪标注 OCR标注 图像分类标注 语音…