当前位置:网站首页>SAP 实施项目中涉及到编程方式操作 Excel 的几种场景介绍
SAP 实施项目中涉及到编程方式操作 Excel 的几种场景介绍
2022-07-19 11:11:00 【InfoQ】
使用 Excel 导入数据到 SAP Cloud for Customer 系统







如何通过 Excel import 的方式导入测试数据到 SAP Commerce Cloud 服务器







使用 SAP ABAP 封装的 Office Integration class 访问本地 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
总结
边栏推荐
- 今日睡眠质量记录75分
- The core of livedatabus is so simple
- Innovation and survival of scholars, step by step
- 在 IDEA 里下个五子棋不过分吧?
- MySQL主从复制数据同步,常见问题总结
- 【Redux】我用一张图彻底理解了Redux的工作流程(附案例、源码)
- 0718 cotton yarn rose by the daily limit, and the market rebounded sharply
- 一文详解scp命令
- openpcdet之pointpillar代码阅读——第三篇:损失函数的计算
- ROS_rqt工具箱
猜你喜欢
新莱福新材IPO过会:年营收7.8亿 汪小明持有47%股权
step num 问题
USART串口通讯
人均瑞数系列,瑞数 4 代 JS 逆向分析
密码太多不知道怎么记录?不如自己写个密码箱小程序
华为占据折叠手机市场半数份额,证明它在高端市场的地位无可替代
YOLOv7 训练报错 IndexError: list index out of range
技术管理进阶——团队一盘散沙,怎么破?
太忙 or 太懒?同一基金经理管理不同产品季报里观点一样
[latex] ppt Drawing, Export EMF format, word insert EMF file and export PDF, PDF cut and export EPS file, latex insert EPS file
随机推荐
慧翰微电子冲刺深交所:年营收4.2亿 上汽创投是股东
Golang语言快速上手到综合实战笔记(Go语言、Beego框架、高并发聊天室、爬虫)
TypeScript 基础 — interface 接口
系统App 签名JKS制作及静默安装
华泰证券账户开通流程,手机上开户安全吗
关于XML文件(八)-DOM和验证
[ppt] continuously use arrows and other tools to avoid repeated selection and improve efficiency
【MSA】关于moveit配置助手-planning groups中的chain的简要说明
arm反汇编 之数组
技术管理进阶——团队一盘散沙,怎么破?
聊一聊 C# 后台GC 到底是怎么回事?
0718-棉花棉纱涨停,市场大幅反弹
Examples of C argc and argv for parsing command line parameters
day04_数组
华为占据折叠手机市场半数份额,证明它在高端市场的地位无可替代
[技术干货]高并发下如何保证接口的幂等性?
系统架构设计师备考经验分享:由点到面
如何使用缓冲队列实现高并发下单业务(荣耀典藏版)
【深度】新派LaaS协议Elephant:重振DeFi赛道发展的关键
6、微服务架构分析