当前位置:网站首页>SAP 实施项目中涉及到编程方式操作 Excel 的几种场景介绍
SAP 实施项目中涉及到编程方式操作 Excel 的几种场景介绍
2022-07-19 13:47:00 【汪子熙】
本文分享笔者在从事 SAP 项目开发工作中,涉及到的通过编程方式操作 Excel 的业务场景,希望起到抛砖引玉的作用。
使用 Excel 导入数据到 SAP Cloud for Customer 系统
假设要上传Account的数据到系统:
点download metadata:
自动download一个zip下来:
在folder Templates里维护要上传的Account data:
把维护好的excel重新打成zip, upload:
稍后在monitor里会观察到成功上传的task:
看到import成功的消息:
UI上能搜索出这条于 2017-11-14 日创建的Account:
如何通过 Excel import 的方式导入测试数据到 SAP Commerce Cloud 服务器
登录 SAP Commerce Cloud Administration Cockpit,从下拉菜单里选择 Product Cockpit:
点击这个箭头,打开 product 视图:
点击这个 excel import 按钮:
选择好 excel 和 media.zip 之后,点击 import:
点击这个按钮查看 import 进度:
进到 Backoffice 页面,根据 excel 里的 product id 查看一个 product,确保导入成功:
使用 SAP ABAP 封装的 Office Integration class 访问本地 Excel 文件
先看这个 report 执行的效果:打开本地 1.xlsx excel 文件:
这个 Excel 内容如下:
使用 get_ranges_data 方法,成功读取 Excel 的数据如下:
本例完整代码如下:
REPORT Z_IMPORT.
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 c 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,
i_total TYPE i,
p_cols TYPE i value 2.
PARAMETERS:
p_file TYPE localfile OBLIGATORY,
p_rows TYPE i DEFAULT 100 OBLIGATORY,
p_mode TYPE c AS CHECKBOX.
INITIALIZATION.
CALL METHOD c_oi_container_control_creator=>get_container_control
IMPORTING
control = iref_control
error = iref_error.
IF iref_error->has_failed = 'X'.
CALL METHOD iref_error->raise_message
EXPORTING
type = 'E'.
ENDIF.
CREATE OBJECT oref_container
EXPORTING
* parent =
container_name = 'CONTsadasda'
* 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(00) WITH '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
.
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:(50) wa_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.
IF p_mode = 'X'.
* DATA: ls_data TYPE ZREPORT,
* lt_data TYPE STANDARD TABLE OF ZREPORT,
* chaR_index TYPE string,
* msg TYPE string.
* LOOP AT i_data INTO wa_data.
*
* IF sy-tabix MOD 2 = 1.
* char_index = sy-tabix.
* ls_data-report_name = wa_data-value.
* CONCATENATE 'Index' char_index ls_data-report_name INTO msg SEPARATED BY SPACE.
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
* TEXT = msg.
* ELSE.
* ls_data-description = wa_data-value.
* APPEND ls_data TO lt_data.
* CLEAR: wa_data,ls_data.
* ENDIF.
* ENDLOOP.
* DELETE FROM zreport.
* INSERT zreport FROM TABLE lt_data.
* COMMIT WORK AND WAIT.
* IF sy-subrc = 0.
* i_total = lines( lt_data ).
* WRITE:/ 'User Assign Row Number:' , p_rows.
* WRITE:/ 'Actually Imported Row Numer:' , i_total.
* ENDIF.
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.
* 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.
MESSAGE e001(00) WITH
'Desktop not found'.
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 = 'Select Excel file'
default_extension = '.xls'
* default_filename =
file_filter = '.xls'
* with_encoding =
initial_directory = l_desktop
* multiselection =
CHANGING
file_table = l_i_files
rc = l_rcode
* 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.
MESSAGE e001(00) WITH 'Error while opening file'.
ENDIF.
READ TABLE l_i_files INDEX 1 INTO l_wa_files.
IF sy-subrc = 0.
p_file = l_wa_files-filename.
ELSE.
MESSAGE e001(00) WITH 'Error while opening file'.
ENDIF.
ENDFORM. " SUB_FILE_F4
总结
本文通过三个实际的业务场景,分别介绍了如何通过 Excel 作为载体,导入数据到 SAP Cloud for Customer 和 SAP Commerce Cloud 系统,以及通过 ABAP 编程语言解析 Excel 文件内容的详细技术实现。
边栏推荐
- Immediate assertion and concurrent assertion in SystemVerilog
- 数据科学与计算智能:内涵、范式与机遇
- 错误索引的解决方案
- [常用工具] 基于psutil和GPUtil获取系统状态信息
- #go 关于包的问题#
- 2022 latest algorithm analysis and handwritten code interview analysis
- 深入了解JUC并发(八)线程池
- Solution of wrong index
- Using GPU to discover human brain connections, large-scale GPU achieves a 100 fold acceleration
- UVM中uvm_event中带参数的用法
猜你喜欢
吃透Chisel语言.19.Chisel组合电路(一)——Chisel组合电路与Chisel条件语句
The first small sample detection benchmark and weak feature enhancement network under X-ray, and the new research of Beihang and iFLYTEK was selected into ACM mm 2022
【SCADA案例】mySCADA助力Vib公司实现产线现代化升级
Deep understanding of JUC concurrency (IX) deep understanding of CAS
Spark高效数据分析03、Spack SQL
统计信息简介
Linux 编译安装redis 离线
查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题
Atos proportional overflow valve agmzo-ters-ps-010/315
还不懂MySQL数据库?阿里p8架构师带你深入浅出MySQL与优化
随机推荐
吃透Chisel语言.16.Chisel模块详解(三)——Chisel的整体连接(Bulk Connection),以流水线处理器为例
Simple solution of CSV Chinese garbled code when opening CSV with Excel
Vulnhub靶机:HACKER KID_ 1.0.1
【ARM】新唐NUC977移植WK2124驱动
视频拼接技术的发展
Do you still have certificates to participate in the open source community?
PHP 匿名函数使用
服务器白名单是什么意思
统计信息简介
vim中单词操作方法总结
矽穀課堂第十三課-直播管理模塊
Test -- basic knowledge
[opencv] record CV2 A hole in videocapture
模糊综合评价法
Xcelium XRUN用户手册
PHP step hole array access
DS(LinTabSeqStorStruct)
atos比例溢流阀AGMZO-TERS-PS-010/315
DS(PatterMatchalgorithm)
显式动力学子模型法在航空发动机整机瞬态冲击并行计算中的应用