SAP ABAP中使用函数ALSM_EXCEL_TO_INTERNAL_TABLE读取EXCEL中不同的SHEET数据
SAP提供了标准的读取EXCEL的函数(ALSM_EXCEL_TO_INTERNAL_TABLE),但是此标准函数无法满足对同一EXCEL 进行不同SHEET的数据读取,一下方法就是教你如何通过修改程序来实现ALSM_EXCEL_TO_INTERNAL_TABLE读取多个SHEET;
一、拷贝ALSM_EXCEL_TO_INTERNAL_TABLE函数,拷贝时函数组选择自定义函数组
二、将ALSM_EXCEL_TO_INTERNAL_TABLE函数中的LALSMEXTOP中的数据拷贝都你自定义函数的TOP中;
三、将函数ALSM_EXCEL_TO_INTERNAL_TABLE中的
INCLUDE LALSMEXUXX.INCLUDE LALSMEXF01.引用到你自定义的函数中;
四、将ALSM_EXCEL_TO_INTERNAL_TABLE中的代码修改如下:
将代码:
GET PROPERTY OF application 'ACTIVESHEET' = worksheet.m_message.
替换为:
IF sheet_name = space."用默认模式GET PROPERTY OF application 'ACTIVESHEET' = worksheet.m_message.ELSE.
*-->可以实现读取多个sheetCALL METHOD OF application 'WORKSHEETS' = worksheetEXPORTING#1 = sheet_name.CALL METHOD OF worksheet 'Activate'.m_message.ENDIF.
结果代码如下:
FUNCTION alsm_excel_to_internal_table .
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(FILENAME) LIKE RLGRAP-FILENAME
*" VALUE(I_BEGIN_COL) TYPE I
*" VALUE(I_BEGIN_ROW) TYPE I
*" VALUE(I_END_COL) TYPE I
*" VALUE(I_END_ROW) TYPE I
*" TABLES
*" INTERN STRUCTURE ALSMEX_TABLINE
*" EXCEPTIONS
*" INCONSISTENT_PARAMETERS
*" UPLOAD_OLE
*"----------------------------------------------------------------------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 MethodsDEFINE m_message.case sy-subrc.when 0.when 1.message id sy-msgid type sy-msgty number sy-msgnowith sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.when others. raise upload_ole.endcase.END-OF-DEFINITION.* check parametersIF 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 fieldsCLASS cl_abap_char_utilities DEFINITION LOAD.ld_separator = cl_abap_char_utilities=>horizontal_tab.* open file in ExcelIF 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.**START BEGIN OF Change By--激活excel表sheet页--02.08.2023 16:57:55-Reagon2008IF sheet_name = space."用默认模式GET PROPERTY OF application 'ACTIVESHEET' = worksheet.m_message.ELSE.
*-->可以实现读取多个sheetCALL METHOD OF application 'WORKSHEETS' = worksheetEXPORTING#1 = sheet_name.CALL METHOD OF worksheet 'Activate'.m_message.ENDIF.
**End OF Change By--激活excel表sheet页--02.08.2023 16:57:55-Reagon2008* mark whole spread sheetCALL METHOD OF worksheet 'Cells' = h_cellEXPORTING #1 = i_begin_row #2 = i_begin_col.m_message.CALL METHOD OF worksheet 'Cells' = h_cell1EXPORTING #1 = i_end_row #2 = i_end_col.m_message.CALL METHOD OF worksheet 'RANGE' = rangeEXPORTING #1 = h_cell #2 = h_cell1.m_message.CALL METHOD OF range 'SELECT'.m_message.* copy marked area (whole spread sheet) into ClippboardCALL METHOD OF range 'COPY'.m_message.* read clipboard into ABAPCALL METHOD cl_gui_frontend_services=>clipboard_importIMPORTINGdata = excel_tabEXCEPTIONScntl_error = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE a037(alsmex).ENDIF.PERFORM separated_to_intern_convert TABLES excel_tab internUSING ld_separator.* clear clipboardREFRESH excel_tab.CALL METHOD cl_gui_frontend_services=>clipboard_exportIMPORTINGdata = excel_tabCHANGINGrc = ld_rcEXCEPTIONScntl_error = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3OTHERS = 4.* quit Excel and free ABAP Object - unfortunately, this does not kill
* the Excel processCALL METHOD OF application 'QUIT'.m_message.* >>>>> Begin of change note 575877
* to kill the Excel process it's necessary to free all used objectsFREE 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
五、程序调用代码如下:
TABLES: zzpmttzsml,"通知书抬头表zzpmttzssb,"通知书设备表zzpmttzsxm,"通知书项目表zzpmttemplate."模板
DATA: lt_zzpmttzsml LIKE TABLE OF zzpmttzsml WITH HEADER LINE, "通知书抬头表lt_zzpmttzssb LIKE TABLE OF zzpmttzssb WITH HEADER LINE, "通知书设备表lt_zzpmttzsxm LIKE TABLE OF zzpmttzsxm WITH HEADER LINE, "通知书项目表lt_zzpmttemplate LIKE TABLE OF zzpmttemplate WITH HEADER LINE. "模板SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY.
PARAMETERS: p_box TYPE c AS CHECKBOX DEFAULT 'X'."P_BOX为X则是创建,为空则是修改
SELECTION-SCREEN END OF BLOCK block1.*&-------------------------------------------------------------------** AT SELECTION-SCREEN*&-------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.* 选择文件PERFORM get_filename USING p_file.START-OF-SELECTION.
*---加载文件*--取得通知书抬头表数据PERFORM upoload_file TABLES lt_zzpmttzsml USING 'ZZPMTTZSML'.*--取得通知书设备表PERFORM upoload_file TABLES lt_zzpmttzssb USING 'ZZPMTTZSSB'.*--取得通知书项目表PERFORM upoload_file TABLES lt_zzpmttzsxm USING 'ZZPMTTZSXM'.*--取得模板PERFORM upoload_file TABLES lt_zzpmttemplate USING 'ZZPMTTEMPLATE'.*--->导入数据PERFORM frm_save.*&---------------------------------------------------------------------*
*& Form get_filename
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* 选择文件
*----------------------------------------------------------------------*FORM get_filename USING p_p_file."出现打开文件的对话框CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGmask = ',*.*,*.*.'mode = 'O' "S为保存,O为打开IMPORTINGfilename = p_p_fileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.ENDFORM. "GET_FILENAME
*&---------------------------------------------------------------------*
*& Form UPOLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* 加载文件
*----------------------------------------------------------------------*FORM upoload_file TABLES lt_input TYPE STANDARD TABLE USING sheet_name.DATA gt_upload LIKE TABLE OF alsmex_tabline WITH HEADER LINE.DATA: ls_i TYPE i.FIELD-SYMBOLS <f>.CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename = p_filei_begin_col = '1'i_begin_row = '2'i_end_col = '14'i_end_row = '50000'sheet_name = sheet_name "指定SHEET名TABLESintern = gt_uploadEXCEPTIONSinconsistent_parameters = 1upload_ole = 2OTHERS = 3.IF sy-subrc = 0.
*--->处理读取出的数据SORT gt_upload BY row col.LOOP AT gt_upload.ls_i = gt_upload-col.ASSIGN COMPONENT ls_i OF STRUCTURE lt_input TO <f>.<f> = gt_upload-value.AT END OF row.APPEND lt_input TO lt_input.CLEAR:lt_input.ENDAT.ENDLOOP.ELSE.WRITE: / 'EXCEL UPLOAD FAILED ', p_file, sy-subrc.ENDIF.
ENDFORM. " UPOLOAD_FILE*&---------------------------------------------------------------------*
*& Form FRM_SAVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* 导入数据
*----------------------------------------------------------------------*FORM frm_save .ENDFORM. " FRM_SAVE
相关文章:
SAP ABAP中使用函数ALSM_EXCEL_TO_INTERNAL_TABLE读取EXCEL中不同的SHEET数据
SAP提供了标准的读取EXCEL的函数(ALSM_EXCEL_TO_INTERNAL_TABLE),但是此标准函数无法满足对同一EXCEL 进行不同SHEET的数据读取,一下方法就是教你如何通过修改程序来实现ALSM_EXCEL_TO_INTERNAL_TABLE读取多个SHEET; …...
Rust 编程小技巧摘选(6)
目录 Rust 编程小技巧(6) 1. 打印字符串 2. 重复打印字串 3. 自定义函数 4. 遍历动态数组 5. 遍历二维数组 6. 同时遍历索引和值 7. 迭代器方法的区别 8. for_each() 用法 9. 分离奇数和偶数 10. 判断素数(质数) Rust 编程小技巧(6) 1. 打印…...
如何保证Redis缓存和数据库的一致性问题
熟练掌握Redis缓存技术? 那么请问Redis缓存中有几种读写策略,又是如何保证与数据库的一致性问题 今天来聊一聊常用的三种缓存读写策略 Cache Aside Pattern Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比…...
【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?
目录 一、前言二、数据分析和深度学习的区别三、人工智能四、深度学习五、Pandas六、Pandas数据结构6.1 Series - 序列6.2 DataFrame - 数据框 七、输入、输出7.1 读取/写入CSV7.2 读取/写入Excel7.3 读取和写入 SQL 查询及数据库表 八、调用帮助九、选择(这里可以参考上一篇文…...
JavaScript 里三个点 ... 的用法
// table表头数据let tableHeadData deepClone(data);let tableCacheData [];//表格缓存对比if (!parent && isCacheHeadData) {// 缓存数据keylet tableCacheKey ${window.location.pathname}-${$self.attr(id)}if (localStorage.getItem(tableCacheKey)) {//根据缓…...
Linux修改系统语言
sudo dpkg-reconfigure locales 按pagedown键,移动红色光标到 zh_CN.UTF-8 UTF-8,空格标记*号(没标记下一页没有这一项),回车。 下一页选择 zh_CN.UTF-8。 如果找不到 dpkg-reconfigure whereis dpkg-reconfigure …...
Spring注解开发
目录 1、简介 2、原始注解 2.1、注解种类 2.2、组件扫描 2.3、具体使用 2.3.1、xml配置 2.3.2、注解配置 3、⭐新注解 3.1、新注解种类 3.2、实践 3.3、运行结果 3.4、警告信息 1、简介 Spring框架提供了许多注解,用于在Java类中进行配置和标记…...
图像处理库(Opencv, Matplotlib, PIL)以及三者之间的转换
文章目录 1. Opencv2. Matplotlib3. PIL4. 三者的区别和相互转换5. Torchvision 中的相关转换库5.1 ToPILImage([mode])5.2 ToTensor5.3 PILToTensor 1. Opencv opencv的基本图像类型可以和numpy数组相互转化,因此可以直接调用torch.from_numpy(img) 将图像转换成t…...
html+Vue+封装axios实现发送请求
在html中使用Vue和Axios时,可以在HTML中引入Vue库和Axios库,然后使用Vue的语法和指令来创建Vue组件和模板。在Vue组件中,你可以使用Axios发送HTTP请求来获取数据,并将数据绑定到Vue模板中进行展示。 <template><div>&…...
GoogLeNet卷积神经网络输出数据形参分析-笔记
GoogLeNet卷积神经网络输出数据形参分析-笔记 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10, 1] [1024, 1] [1] 子空间执行逻辑 def forward_old(self, x):# 支路1只包含一个1x1卷积p1 F.relu(self.p1_1(x))# 支路2包含 1…...
【docker】dockerfile发布springboot项目
目录 一、实现步骤二、示例 一、实现步骤 1.定义父镜像:FROM java:8 2.定义作者信息:MAINTAINER:learn_docker<https://www.docker.com> 3.将jar包添加到容器:ADD jar包名称.jar app.jar 4.定义容器启动执行命令:…...
利用docker run -v 命令实现使用宿主机中没有的命令
利用docker run -v 命令实现使用宿主机中没有的命令 使用容器中的jar命令解压jar包,并将解压内容输出到挂载在宿主机中的目录里 使用容器中的jar命令解压jar包,并将解压内容输出到挂载在宿主机中的目录里 docker run -it --name java -v /www/temp/java…...
【小沐学NLP】在线AI绘画网站(百度:文心一格)
文章目录 1、简介2、文心一格2.1 功能简介2.2 操作步骤2.3 使用费用2.4 若干示例2.4.1 女孩2.4.2 昙花2.4.3 山水画2.4.4 夜晚2.4.5 古诗2.4.6 二次元2.4.7 帅哥 结语 1、简介 当下,越来越多AI领域前沿技术争相落地,逐步释放出极大的产业价值࿰…...
react经验5:访问子组件内容
应用场景 父级需要调用子组件的某函数 实现步骤 案例:创建自定义按钮 button.tsx import { Ref, forwardRef, useImperativeHandle,ReactNode} from "react" declare type ButtonProps {/**按钮文字 */children?: ReactNode,onClick?: () > voi…...
【LeetCode】647. 回文子串
题目链接 文章目录 1. 思路讲解1.1 方法选择1.2 dp表的创建1.3 状态转移方程1.4 填表顺序 2. 代码实现 1. 思路讲解 1.1 方法选择 这道题我们采用动态规划的解法,倒不是动态规划的解法对于这道题有多好,它并不是最优解。但是,这道题的动态…...
Open3D(C++) 角度制与弧度制的相互转换
目录 一、弧度转角度1、计算公式2、主要函数3、示例代码4、结果展示二、角度转弧度1、计算公式2、主要函数3、示例代码4、结果展示三、归一化到(-PI,PI)1、主要函数<...
【小沐学NLP】在线AI绘画网站(网易云课堂:AI绘画工坊)
文章目录 1、简介1.1 参与方式1.2 模型简介 2、使用费用3、操作步骤3.1 选择模型3.2 输入提示词3.3 调整参数3.4 图片生成 4、测试例子4.1 小狗4.2 蜘蛛侠4.3 人物4.4 龙猫 结语 1、简介 Stable Diffusion是一种强大的图像生成AI,它可以根据输入的文字描述词&#…...
GNN code Tips
1. 重置label取值范围 problem: otherwise occurs IndexError: target out of bounds # reset labels value range, otherwise occurs IndexError: target out of bounds uni_set torch.unique(labels) to_set torch.tensor(list(range(len(uni_set)))) labels_reset label…...
物联网|按键实验---学习I/O的输入及中断的编程|函数说明的格式|如何使用CMSIS的延时|读取通过外部中断实现按键捕获代码的实现及分析-学习笔记(14)
文章目录 通过外部中断实现按键捕获代码的实现及分析Tip1:函数说明的格式Tip2:如何使用CMSIS的延时GetTick函数原型stm32f407_intr_handle.c解析中断处理函数:void EXTI4_IRQHandler 调试流程软件模拟调试 两种代码的比较课后作业: 通过外部中断实现按键捕获代码的实…...
Java对象的前世今生
文章目录 一、创建对象的步骤二、类加载机制三、内存分配指针碰撞 (内存连续)空闲列表 (内存不连续) 四、创建对象的5种方法五、浅拷贝与深拷贝 以下一行代码内部发生了什么? Person person new Person();一、创建对象的步骤 根据JLS中的规定,Java对象…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
