SAP FPM通过ABAP读取EXCEL值到动态内表并把数据发送到其他组件
文章目录
- 需求
- 一、效果
- 二、实现
- 1.部分代码
- 2.其中相关的内容可查看系列文章获悉
- 总结
需求
在网页应用中(FPM、FBI、WDA)通过ABAP读取EXCEL值到动态内表并把数据发送到其他组件
一、效果
有网页应用如下需要实现数据导入功能,但是此页签行列信息都是动态生成,所以我们在处理上传excel时也需要动态处理
点击数据上传后实现读取与数据回传
二、实现
1.部分代码
先通过GET_VALUE获取到事先传递的结构信息,再读取excel内容,插入data中,最后唤起refresh事件,通知页面接收数据
这是在上载类中PROCESS_EVENT中实现的方法
如下:
METHOD if_fpm_guibb_form~process_event.DATA: lo_fpm TYPE REF TO if_fpm,lo_event TYPE REF TO cl_fpm_event.DATA: lr_upload TYPE REF TO data.DATA: lv_num TYPE i.FIELD-SYMBOLS: <fs_data> TYPE zes_s_co_upload,<fs_table> TYPE STANDARD TABLE,<fs_table_data> TYPE STANDARD TABLE,<fs_struc> TYPE any,<fs_struc_data> TYPE any,<fs_temp> TYPE any,<fs_temp_value> TYPE any.DATA: lr_excel TYPE REF TO cl_fdt_xl_spreadsheet,lr_excel_core TYPE REF TO cx_fdt_excel_core,lr_data TYPE REF TO data,lt_worksheets TYPE STANDARD TABLE OF string,lv_ws_name TYPE string,lv_xstring TYPE xstring.DATA lr_struc TYPE REF TO cl_abap_structdescr.DATA lr_table TYPE REF TO cl_abap_tabledescr.DATA lr_type TYPE REF TO cl_abap_typedescr.DATA lt_comp TYPE abap_component_tab.DATA ls_comp LIKE LINE OF lt_comp.DATA lr_struct_data TYPE REF TO data.DATA lr_table_data TYPE REF TO data.DATA lv_struct TYPE string.DATA lv_index TYPE i.DATA lv_index_unit TYPE i.DATA:lt_component TYPE abap_compdescr_tab .DATA:lo_ref TYPE REF TO cx_root,ls_bapiret2 TYPE bapiret2,lv_string TYPE string.* FIELD-SYMBOLS <fs_table> TYPE STANDARD TABLE.
* FIELD-SYMBOLS <fs_struc> TYPE any.lo_fpm ?= cl_fpm_factory=>get_instance( ).CALL METHOD lo_fpm->mo_app_parameter->get_valueEXPORTINGiv_key = 'TABLE'IMPORTINGer_value = lr_table_data.CALL METHOD lo_fpm->mo_app_parameter->get_valueEXPORTINGiv_key = 'LINE'IMPORTINGer_value = lr_struct_data.CALL METHOD lo_fpm->mo_app_parameter->get_valueEXPORTINGiv_key = 'INDEX'IMPORTINGev_value = lv_index.
*
* lr_struc ?= cl_abap_structdescr=>describe_by_name( lv_struct ).
* lt_component = lr_struc->components.
* DESCRIBE TABLE lt_component LINES lv_index.
*
* CALL METHOD cl_abap_tabledescr=>create
* EXPORTING
* p_line_type = lr_struc
* RECEIVING
* p_result = lr_table.
*
* CREATE DATA lr_struct_data TYPE HANDLE lr_struc.
* CREATE DATA lr_table_data TYPE HANDLE lr_table.ASSIGN lr_struct_data->* TO <fs_struc_data>.ASSIGN lr_table_data->* TO <fs_table_data>.CASE io_event->mv_event_id.WHEN cl_fpm_event=>gc_event_close_dialog_box.ASSIGN ms_data TO <fs_data>.IF <fs_data> IS ASSIGNED.lv_xstring = <fs_data>-data.TRY.CREATE OBJECT lr_excelEXPORTINGdocument_name = <fs_data>-filenamexdocument = lv_xstring.CATCH cx_fdt_excel_core INTO lr_excel_core.RETURN.ENDTRY.
* Call method to get list of worksheets in the .xlsx fileIF lr_excel IS BOUND.lr_excel->if_fdt_doc_spreadsheet~get_worksheet_names(IMPORTINGworksheet_names = lt_worksheets ).
* Condition to check whether .xlsx file has any active worksheetsIF lt_worksheets IS NOT INITIAL.READ TABLE lt_worksheets INDEX 1 INTO lv_ws_name.
* Get reference of .xlsx file contents in the active worksheetlr_data = lr_excel->if_fdt_doc_spreadsheet~get_itab_from_worksheet(lv_ws_name ).
* Check if any blank excel file is uploaded by userIF lr_data IS BOUND.ASSIGN lr_data->* TO <fs_table>.IF <fs_table> IS ASSIGNED.LOOP AT <fs_table> ASSIGNING <fs_struc>.CHECK <fs_struc> IS NOT INITIAL."skip blank lineIF sy-tabix = 1.
* DO lv_index TIMES.
* ASSIGN COMPONENT sy-index OF STRUCTURE <fs_struc> TO <fs_temp>.
* IF <fs_temp> IS ASSIGNED AND <fs_temp> = '基本计量单位'.
* lv_index_unit = sy-index.
* UNASSIGN <fs_temp>.
* ENDIF.
* ENDDO.CONTINUE.ENDIF.DO lv_index TIMES.ASSIGN COMPONENT sy-index OF STRUCTURE <fs_struc> TO <fs_temp>.ASSIGN COMPONENT sy-index OF STRUCTURE <fs_struc_data> TO <fs_temp_value>.IF <fs_temp> IS ASSIGNED..TRY .<fs_temp_value> = <fs_temp>.CATCH cx_root INTO lo_ref.lv_string = lo_ref->get_text( ).ls_bapiret2-message_v2 = lv_string.ls_bapiret2-message_v3 = <fs_temp>.ls_bapiret2-type = 'E'.ls_bapiret2-id = 'ZPS'.ls_bapiret2-number = '147'.ls_bapiret2-message_v1 = text-010.CALL METHOD lo_fpm->mo_message_manager->report_bapiret2_messageEXPORTINGis_bapiret2 = ls_bapiret2io_component = lo_fpm->mo_message_manager.ENDTRY.
* IF lv_index_unit = sy-index.
* CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
* EXPORTING
* input = <fs_temp_value>
** LANGUAGE = SY-LANGU
* IMPORTING
* output = <fs_temp_value>
* EXCEPTIONS
* unit_not_found = 1
* OTHERS = 2.
* ENDIF.UNASSIGN <fs_temp>.ENDIF.ENDDO.APPEND <fs_struc_data> TO <fs_table_data>.ENDLOOP.IF <fs_table_data> IS NOT INITIAL.CREATE OBJECT lo_eventEXPORTINGiv_event_id = 'REFRESH'.GET REFERENCE OF <fs_table_data> INTO lr_upload.lo_event->mo_event_data->set_value(iv_key = 'UPLOAD_DATA'ir_value = lr_upload ).lo_fpm->raise_event( io_event = lo_event ).ENDIF.ENDIF.ENDIF.ENDIF.ENDIF.ENDIF.ENDCASE.ENDMETHOD.
2.其中相关的内容可查看系列文章获悉
FPM从头开发一个高级应用程序
总结
以上。
SAP FPM通过ABAP读取EXCEL值到动态内表并把数据发送到其他组件相关推荐
- 如何读取Excel表格中不同sheet表的同一位置单元格数据,并绘制条形图呢?
作者 | 黄伟呢 来源 | 数据分析与统计学之美 今天,有位朋友在群里面咨询了一个问题:如何读取Excel表格中"不同sheet表"的同一位置单元格数据,并绘制条形图呢? 有人提议 ...
- java读取sheet2_java读取Excel指定sheet页或全部sheet页数据(含2003和2007版本)
java读取Excel指定sheet页或全部sheet页数据(含2003和2007版本) 在http://download.csdn.net/detail/u010792467/8072015下载所需 ...
- python读取Excel工作簿、工作表
python读取Excel工作簿.工作表 最近需要用python操作Excel表格,因此大概学习了一下如何操作,表较简单但是很实用,这里记录一些简单的操作. import xlrd # 读取工作簿 w ...
- SAP ABAP 动态内表的条件查询(SORT / READ TABLE / LOOP)
SAP ABAP 动态内表的条件查询(SORT / READ TABLE / LOOP) 简介: 动态内表是动态报表的核心,动态内表的条件操作能有效解决性能问题.这篇文章用于普及动态内表在 SORT ...
- java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解
java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...
- ABAP中创建动态内表的三种方法(转载)
BAP中创建动态内表的三种方法 第一种: 如果我们需要的动态内表字段或者动态工作区和数据字典中的类型一致,可以直接使用CREATE DATA生成,当然也可以是自定义类型. 比如要产生和数据表MARA结 ...
- echart 多柱图只显示部分数据标签_python|读取Excel生成pyecharts动态分析图
导入数据 #导入所需的库文件import numpy as npimport pandas as pdfrom pyecharts import Bar#导入excel数据data=pd.DataFr ...
- NET CORE读取Excel.xlsx单元格内的图片,并关联当前业务ID推送图片到指定服务器...
NET CORE读取Excel.xlsx单元格图片的场景,一般是批量导入业务数据,例如:药品的图片,医师资格证,商品上架.商家营业资质.水果信息.用户头像等等 这里我截个图,图文并茂更好理解 特别声明 ...
- Matlab读取excel并使用拉依达准则筛选数据
1.Matlab读取Excel表格 版本:matlab R2020a,Excel2019的xlsx格式文件 1.1 导入数据 1.2 选择并打开要导入的.xlsx文件 1.3 选择数据区域,选择输出到 ...
最新文章
- 通过xmanager远程连接redhat linux as 5
- python爬虫实例(urllibBeautifulSoup)
- golang: 类型转换和类型断言
- 平衡二叉查找树 AVL 的实现
- MySQL安装后默认自带数据库的作用
- 深入了解nginx.conf配置文件
- 基于 Multiple Teacher Single Student 框架的多领域对话模型
- zuc算法代码详解_ZUC算法原理及实现过程.doc
- python刷b站视频浏览量_python刷B站播放量
- 高考成绩真的可以改了?
- Aladdin and the Flying Carpet (唯一分解定理)
- 最新问题:错误代码ERROR ITMS-90096 一.ERROR ITMS-90096解决方法
- android kodi 启动器,kodi安卓
- 详解利用基于gensim的TF-IDF算法实现基于文本相似度的推荐算法
- quartz不正常执行.执行一段时间后无故停止
- doc跟docx的区别
- 【射影几何06】齐次坐标下“点-线”几何表示
- 水货iPad 2价格骤降数千元
- gradle 缓存的jar包仓库的目录在哪
- Book Collector for Mac(图书信息管理软件)
热门文章
- 卷积神经网络可视化理解
- 奶爸日记 - 带娃并不那么痛苦
- DCDC基础(4)-- 非同步BUCK电路的续流二极管是怎么确定的?
- 2010年征计算机图书作者/IT人文图书作者启事
- mysql errcode 13_Linux下MySQL的写文件时权限错误(Errcode: 13)解决方法
- 利用Canvas添加水印
- 虎口夺食! 打破Facebook谷歌垄断, MIT大神和他的区块链数据库传奇! |人物志
- 乡村振兴周年记:重大进展的一年,苏宁智慧零售贡献几何?
- 2017年东南大学机械工程学院考研科目和参考书目
- 陶瓷电容分类说明 X7R, X7S, X5R X8R, Z5U, Y5V, C0G等电容的区别