当前位置:网站首页>批量处理-Excel导入模板1.1-支持多Sheet页
批量处理-Excel导入模板1.1-支持多Sheet页
2022-06-27 19:56:00 【Tab Zhu】
Title
个人Excel上载模板(兼容多个Sheet)
之前的excel模板使用了很久,但是最近老是遇到多个sheet页面上传的需求,所以自己整理了一个上传多个sheet页excel上载模板,各位客官可以选择性食用(Ctrl+C&V)
1.首先,我们需要在Report程序中添加一个类型TY_SHEETNAME_INFO 参考类型为ZCL_TAB_DOC=>TT_SHEETNAME_INFO,存放了如何输入Excel的信息,
LT_TABC 的类型是参考的ZCL_TAB_DOC=>TT_TABC
自定义的类型请看代码
测试为通过Excel 上传数据,且支持多个Sheet页签
我们准备2个sheet 分别上传物料的不同信息
Sheet1
Sheet2
调用默认类打开需要上传的Excel(其实就是封装了一下cl_gui_frontend_services=>file_open_dialog 给下默认值)
调用Import_excel_by_ole类,获取excel数据,按照Sheet名称对应放在LT_TABC中
调用excel_convert_table 来将excel中每个sheet页数据填入到对应的内表中,
其中:FRM_SPECIAL_PROCESS 为需要执行的特殊处理,比如日期转化(2021/9/8->20210908),单位转化(PC->ST)等操作
最后我们把物料单位和描述合在一起,输出看一下效果
下面是调用的模板程序(Copy 可用)
01
调用程序示例
*&---------------------------------------------------------------------*
*& Report Z_TAB_TEST04
*&---------------------------------------------------------------------*
REPORT z_tab_test04.
*&=====================================================================*
*& CREATE date: 2021.09.08
*& created by: tab-zhu (微信公众号:tab_jxzhu)
*&=====================================================================*
DATA:BEGIN OF gs_excel,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
meins TYPE mara-meins,
creationdate TYPE datum,
creationtime TYPE uzeit,
END OF gs_excel.
DATA gt_excel LIKE TABLE OF gs_excel.
DATA:BEGIN OF gs_excel_sheet1,
matnr TYPE mara-matnr,
meins TYPE mara-meins,
creationdate TYPE datum,
creationtime TYPE uzeit,
END OF gs_excel_sheet1.
DATA gt_excel_sheet1 LIKE TABLE OF gs_excel_sheet1.
DATA:BEGIN OF gs_excel_sheet2,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
END OF gs_excel_sheet2.
DATA gt_excel_sheet2 LIKE TABLE OF gs_excel_sheet2.
DATA:lr_excel TYPE REF TO zcl_tab_doc.
DATA lt_files TYPE filetable.
DATA l_rc TYPE i.
DATA l_filename TYPE string.
DATA lt_sheetname TYPE zcl_tab_doc=>tt_sheetname_info."存放了如何输入excel的信息
DATA: lr_functions TYPE REF TO cl_salv_functions_list.
DATA lt_tabc TYPE zcl_tab_doc=>tt_tabc."存放获取sheet页的数据
PARAMETERS:p_file TYPE rlgrap-filename OBLIGATORY MEMORY ID mi.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
"
CALL METHOD zcl_tab_doc=>file_open_dialog_default
CHANGING
ct_file_table = lt_files
c_rc = l_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_support_by_gui = 4
OTHERS = 5.
READ TABLE lt_files INTO DATA(ls_files) INDEX 1.
IF sy-subrc EQ 0.
p_file = ls_files-filename.
ENDIF.
START-OF-SELECTION.
lt_sheetname = VALUE #(
( sheetname = 'Sheet1'
startrow = 2
startcol = 1
every_copy_lines = 30
endcol = 4
)
( sheetname = 'Sheet2'
startrow = 2
startcol = 1
every_copy_lines = 30
endcol = 2
)
).
CREATE OBJECT lr_excel.
l_filename = p_file.
CALL METHOD lr_excel->import_excel_by_ole
EXPORTING
i_filename = l_filename
CHANGING
ct_sheetname = lt_sheetname
ct_tabc = lt_tabc
EXCEPTIONS
file_open_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e398(00) WITH |File opened failed!| ''.
ENDIF.
CHECK lt_tabc[] IS NOT INITIAL.
READ TABLE lt_tabc INTO DATA(ls_tabc) WITH KEY sheetname = 'Sheet1'.
IF sy-subrc EQ 0.
CALL METHOD lr_excel->excel_convert_table
EXPORTING
* i_separator = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
is_table = ls_tabc
i_repid = 'Z_TAB_TEST04'
i_special_process = 'FRM_SPECIAL_PROCESS'
CHANGING
ct_table = gt_excel_sheet1
EXCEPTIONS
context_convert_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e398(00) WITH 'Context converted failed!' ''.
ENDIF.
ENDIF.
CHECK gt_excel_sheet1[] IS NOT INITIAL.
READ TABLE lt_tabc INTO ls_tabc WITH KEY sheetname = 'Sheet2'.
IF sy-subrc EQ 0.
CALL METHOD lr_excel->excel_convert_table
EXPORTING
* i_separator = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
is_table = ls_tabc
i_repid = 'Z_TAB_TEST04'
i_special_process = 'FRM_SPECIAL_PROCESS'
CHANGING
ct_table = gt_excel_sheet2
EXCEPTIONS
context_convert_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e398(00) WITH 'Context converted failed!' ''.
ENDIF.
ENDIF.
SORT gt_excel_sheet2 BY matnr.
LOOP AT gt_excel_sheet1 INTO gs_excel_sheet1.
READ TABLE gt_excel_sheet2 INTO gs_excel_sheet2 WITH KEY matnr = gs_excel_sheet1-matnr BINARY SEARCH.
IF sy-subrc EQ 0.
gs_excel-maktx = gs_excel_sheet2-maktx.
ENDIF.
MOVE-CORRESPONDING gs_excel_sheet1 TO gs_excel.
APPEND gs_excel TO gt_excel.
CLEAR gs_excel.
ENDLOOP.
DATA go_alv TYPE REF TO cl_salv_table.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = go_alv
CHANGING
t_table = gt_excel[] ).
CATCH cx_salv_msg.
ENDTRY.
lr_functions = go_alv->get_functions( ).
lr_functions->set_all( 'X' ).
CHECK go_alv IS BOUND.
go_alv->display( ).
FORM frm_special_process USING
is_componet TYPE abap_compdescr
i_row TYPE i
i_col TYPE i
CHANGING
c_cell TYPE string.
DATA lv_matnr TYPE mara-matnr.
CHECK c_cell IS NOT INITIAL.
CASE i_col.
WHEN '1'.
"内外部转化
lv_matnr = c_cell.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = lv_matnr
IMPORTING
output = lv_matnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
CLEAR lv_matnr.
ENDIF.
c_cell = lv_matnr.
WHEN '2'.
CHECK is_componet-name = 'MEINS'."转化单位
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = c_cell
language = sy-langu
IMPORTING
output = c_cell
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e398(00) WITH |Unit convert failed!| ''.
ENDIF.
WHEN '3'.
"日期转换
DATA l_num2(2) TYPE n.
SPLIT c_cell AT '/' INTO TABLE DATA(lt_cell).
CLEAR c_cell.
LOOP AT lt_cell INTO DATA(ls_cell).
CASE sy-tabix.
WHEN 1.
c_cell = ls_cell.
WHEN 2 OR 3.
l_num2 = ls_cell.
c_cell = |{ c_cell }{ l_num2 }|.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
REPLACE ALL OCCURRENCES OF '-' IN c_cell WITH ''.
REPLACE ALL OCCURRENCES OF '/' IN c_cell WITH ''.
CONDENSE c_cell NO-GAPS.
WHEN '4'.
"时间转换
REPLACE ALL OCCURRENCES OF ':' IN c_cell WITH ''.
CONDENSE c_cell NO-GAPS.
WHEN OTHERS.
ENDCASE.
ENDFORM.02
Excel文档处理类
CLASS zcl_tab_doc DEFINITION
PUBLIC
CREATE PUBLIC
*&=====================================================================*
*& CREATE date: 2021.09.08
*& created by: tab-zhu (微信公众号:tab_jxzhu)
*&---------------------------------------------------------------------*
GLOBAL FRIENDS cl_gui_frontend_services .
PUBLIC SECTION.
TYPES:
BEGIN OF ty_sheetname_info,
sheetname TYPE string,
startrow TYPE i,
startcol TYPE i,
every_copy_lines TYPE i,
endcol TYPE i,
END OF ty_sheetname_info .
TYPES:
tt_sheetname_info TYPE STANDARD TABLE OF ty_sheetname_info .
TYPES:
ty_char30000 TYPE c LENGTH 30000 .
TYPES:
tt_char30000 TYPE TABLE OF ty_char30000 .
DATA:
dt_excel_context TYPE STANDARD TABLE OF ty_char30000 .
TYPES:
BEGIN OF ty_tabc,
sheetname TYPE string, "sheet名称
context LIKE dt_excel_context, "sheet页的数据
END OF ty_tabc .
TYPES:
tt_tabc TYPE STANDARD TABLE OF ty_tabc .
"保存文件
CLASS-METHODS file_save_dialog_default
IMPORTING
VALUE(i_window_title) TYPE string DEFAULT 'Select Download Path'
VALUE(i_default_extension) TYPE string DEFAULT 'xlsx'
VALUE(i_default_filename) TYPE string DEFAULT 'Download'
!i_with_encoding TYPE abap_bool OPTIONAL
VALUE(i_file_filter) TYPE string DEFAULT 'Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel 97-2003(*.xls)|*.xls'
VALUE(i_initial_directory) TYPE string OPTIONAL
!i_prompt_on_overwrite TYPE abap_bool DEFAULT 'X'
CHANGING
!c_filename TYPE string
!c_path TYPE string
!c_fullpath TYPE string
!c_user_action TYPE i OPTIONAL
!c_file_encoding TYPE abap_encoding OPTIONAL
EXCEPTIONS
cntl_error
error_no_gui
not_supported_by_gui
invalid_default_file_name .
"读取文件
CLASS-METHODS file_open_dialog_default
IMPORTING
VALUE(i_window_title) TYPE string DEFAULT 'Select Upload File'
VALUE(i_default_extension) TYPE string DEFAULT '.xlsx|.xls'
VALUE(i_default_filename) TYPE string OPTIONAL
VALUE(i_file_filter) TYPE string DEFAULT 'Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel 97-2003(*.xls)|*.xls'
VALUE(i_with_encoding) TYPE abap_bool OPTIONAL
VALUE(i_initial_directory) TYPE string OPTIONAL
VALUE(i_multiselection) TYPE abap_bool DEFAULT ''
CHANGING
!ct_file_table TYPE filetable
!c_rc TYPE i
!c_user_action TYPE i OPTIONAL
!c_file_encoding TYPE abap_encoding OPTIONAL
EXCEPTIONS
file_open_dialog_failed
cntl_error
error_no_gui
not_support_by_gui .
"导入excel到内表
CLASS-METHODS import_excel_by_ole
IMPORTING
VALUE(i_filename) TYPE string
CHANGING
VALUE(ct_sheetname) TYPE tt_sheetname_info
VALUE(ct_tabc) TYPE tt_tabc
EXCEPTIONS
file_open_error .
"EXCEL 内容转化为 内表-(由调用程序决定)
METHODS excel_convert_table
IMPORTING
VALUE(i_separator) TYPE abap_char1 DEFAULT cl_abap_char_utilities=>horizontal_tab
VALUE(is_table) TYPE ty_tabc
VALUE(i_repid) TYPE sy-repid DEFAULT sy-repid
VALUE(i_special_process) TYPE string OPTIONAL"special process form
CHANGING
!ct_table TYPE STANDARD TABLE
EXCEPTIONS
context_convert_failed .
PROTECTED SECTION.
"单元格的特殊处理
METHODS excel_convert_special_process
IMPORTING
!is_componet TYPE abap_compdescr OPTIONAL
!i_row TYPE i
!i_col TYPE i
CHANGING
!c_cell TYPE string
EXCEPTIONS
convert_error .
PRIVATE SECTION.
DATA m_special_process_form TYPE string.
DATA m_repid TYPE sy-repid VALUE sy-repid ##NO_TEXT.
ENDCLASS.
CLASS ZCL_TAB_DOC IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_TAB_DOC->EXCEL_CONVERT_SPECIAL_PROCESS
* +-------------------------------------------------------------------------------------------------+
* | [--->] IS_COMPONET TYPE ABAP_COMPDESCR(optional)
* | [--->] I_ROW TYPE I
* | [--->] I_COL TYPE I
* | [<-->] C_CELL TYPE STRING
* | [EXC!] CONVERT_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD excel_convert_special_process.
"table ZTDOC_CONFIG_TAB
CHECK m_special_process_form IS NOT INITIAL.
PERFORM (m_special_process_form) IN PROGRAM (m_repid) IF FOUND
USING is_componet i_row i_col CHANGING c_cell.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_DOC->EXCEL_CONVERT_TABLE
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_SEPARATOR TYPE ABAP_CHAR1 (default =CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB)
* | [--->] IS_TABLE TYPE TY_TABC
* | [--->] I_REPID TYPE SY-REPID (default =SY-REPID)
* | [--->] I_SPECIAL_PROCESS TYPE STRING(optional)
* | [<-->] CT_TABLE TYPE STANDARD TABLE
* | [EXC!] CONTEXT_CONVERT_FAILED
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD excel_convert_table.
DATA lv_row TYPE i.
DATA lv_col TYPE i.
DATA lv_tabix TYPE i.
DATA: lt_cell TYPE TABLE OF string,
ls_cell TYPE string.
DATA:
lo_cx_root TYPE REF TO cx_root.
DATA
lr_descr TYPE REF TO cl_abap_structdescr.
DATA lr_line TYPE REF TO data.
FIELD-SYMBOLS: <value> TYPE any,
<line> TYPE any.
CREATE DATA lr_line LIKE LINE OF ct_table.
ASSIGN lr_line->* TO <line>.
lr_descr ?= cl_abap_typedescr=>describe_by_data( <line> ).
"m_repid m_special_process
m_repid = i_repid.
m_special_process_form = i_special_process.
LOOP AT is_table-context INTO DATA(ls_context).
lv_row = sy-tabix.
SPLIT ls_context AT cl_abap_char_utilities=>horizontal_tab INTO TABLE lt_cell.
LOOP AT lt_cell INTO ls_cell.
lv_tabix = sy-tabix."DISPOSAL CURRENT ROW
lv_col = lv_tabix.
READ TABLE lr_descr->components INTO DATA(ls_component) INDEX lv_tabix.
IF sy-subrc EQ 0.
CALL METHOD me->excel_convert_special_process
EXPORTING
is_componet = ls_component "字段信息
i_row = lv_row "行
i_col = lv_col "列
CHANGING
c_cell = ls_cell.
ASSIGN COMPONENT lv_col OF STRUCTURE <line> TO <value>.
IF sy-subrc EQ 0.
TRY.
<value> = ls_cell.
CATCH cx_root INTO lo_cx_root.
"In sheet &1,the data format of Row &2 Field &3 is not right
DATA(lv_text) = |In sheet{ is_table-sheetname },the data format of Row { lv_row } Field { ls_component-name } is not right|.
MESSAGE e368(00) WITH lv_text '' RAISING context_convert_failed.
ENDTRY.
ENDIF.
ENDIF.
ENDLOOP.
APPEND <line> TO ct_table.
CLEAR <line>.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_TAB_DOC=>FILE_OPEN_DIALOG_DEFAULT
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_WINDOW_TITLE TYPE STRING (default ='Select Upload File')
* | [--->] I_DEFAULT_EXTENSION TYPE STRING (default ='.xlsx|.xls')
* | [--->] I_DEFAULT_FILENAME TYPE STRING(optional)
* | [--->] I_FILE_FILTER TYPE STRING (default ='Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel 97-2003(*.xls)|*.xls')
* | [--->] I_WITH_ENCODING TYPE ABAP_BOOL(optional)
* | [--->] I_INITIAL_DIRECTORY TYPE STRING(optional)
* | [--->] I_MULTISELECTION TYPE ABAP_BOOL (default ='')
* | [<-->] CT_FILE_TABLE TYPE FILETABLE
* | [<-->] C_RC TYPE I
* | [<-->] C_USER_ACTION TYPE I(optional)
* | [<-->] C_FILE_ENCODING TYPE ABAP_ENCODING(optional)
* | [EXC!] FILE_OPEN_DIALOG_FAILED
* | [EXC!] CNTL_ERROR
* | [EXC!] ERROR_NO_GUI
* | [EXC!] NOT_SUPPORT_BY_GUI
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD file_open_dialog_default.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = i_window_title
default_extension = i_default_extension
default_filename = i_default_filename
file_filter = i_file_filter
with_encoding = i_with_encoding
initial_directory = i_initial_directory
multiselection = i_multiselection
CHANGING
file_table = ct_file_table
rc = c_rc
user_action = c_user_action
file_encoding = c_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.
CASE sy-subrc.
WHEN 1.
RAISE file_open_dialog_failed.
WHEN 2.
RAISE cntl_error.
WHEN 3.
RAISE error_no_gui.
WHEN 4.
RAISE not_support_by_gui.
WHEN OTHERS.
ENDCASE.
ENDIF.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_TAB_DOC=>FILE_SAVE_DIALOG_DEFAULT
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_WINDOW_TITLE TYPE STRING (default ='Select Download Path')
* | [--->] I_DEFAULT_EXTENSION TYPE STRING (default ='xlsx')
* | [--->] I_DEFAULT_FILENAME TYPE STRING (default ='Download')
* | [--->] I_WITH_ENCODING TYPE ABAP_BOOL(optional)
* | [--->] I_FILE_FILTER TYPE STRING (default ='Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel 97-2003(*.xls)|*.xls')
* | [--->] I_INITIAL_DIRECTORY TYPE STRING(optional)
* | [--->] I_PROMPT_ON_OVERWRITE TYPE ABAP_BOOL (default ='X')
* | [<-->] C_FILENAME TYPE STRING
* | [<-->] C_PATH TYPE STRING
* | [<-->] C_FULLPATH TYPE STRING
* | [<-->] C_USER_ACTION TYPE I(optional)
* | [<-->] C_FILE_ENCODING TYPE ABAP_ENCODING(optional)
* | [EXC!] CNTL_ERROR
* | [EXC!] ERROR_NO_GUI
* | [EXC!] NOT_SUPPORTED_BY_GUI
* | [EXC!] INVALID_DEFAULT_FILE_NAME
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD file_save_dialog_default.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = i_window_title
default_extension = i_default_extension
default_file_name = i_default_filename
with_encoding = i_with_encoding
file_filter = i_file_filter
initial_directory = i_initial_directory
prompt_on_overwrite = i_prompt_on_overwrite
CHANGING
filename = c_filename
path = c_path
fullpath = c_fullpath
user_action = c_user_action
file_encoding = c_file_encoding
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
RAISE cntl_error.
WHEN 2.
RAISE error_no_gui.
WHEN 3.
RAISE not_supported_by_gui.
WHEN 4.
RAISE invalid_default_file_name.
WHEN OTHERS.
ENDCASE.
ENDIF.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_TAB_DOC=>IMPORT_EXCEL_BY_OLE
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_FILENAME TYPE STRING
* | [<-->] CT_SHEETNAME TYPE TT_SHEETNAME_INFO
* | [<-->] CT_TABC TYPE TT_TABC
* | [EXC!] FILE_OPEN_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD import_excel_by_ole.
DATA lw_tabc TYPE ty_tabc.
DATA lt_tabc LIKE TABLE OF lw_tabc.
DATA:
lv_column_num TYPE i,
lv_column_skp TYPE i,
lw_tab_ref TYPE REF TO data.
TYPE-POOLS:
ole2.
DATA:
ole_excel TYPE ole2_object,
ole_workbooks TYPE ole2_object,
ole_workbook TYPE ole2_object,
ole_worksheets TYPE ole2_object,
ole_worksheet TYPE ole2_object,
ole_cell_begin TYPE ole2_object,
ole_cell_end TYPE ole2_object,
ole_range TYPE ole2_object.
DATA:
lv_subrc TYPE sy-subrc,
lv_begin_col TYPE i,
lv_end_col TYPE i,
lv_begin_row TYPE i,
lv_end_row TYPE i,
lv_add_rows TYPE i VALUE 3000. "默认,每次COPY3000行
DATA:
lt_excel_tab TYPE STANDARD TABLE OF ty_char30000,
lw_excel_tab TYPE ty_char30000,
lw_excel_tab_tmp TYPE ty_char30000.
*->生成Excel object
CREATE OBJECT ole_excel 'Excel.Application'.
IF sy-subrc <> 0.
MESSAGE e368(00) WITH 'file_open_failed' RAISING file_open_error.
ENDIF.
SET PROPERTY OF ole_excel 'Visible' = 0.
GET PROPERTY OF ole_excel 'Workbooks' = ole_workbooks.
CALL METHOD OF
ole_workbooks
'Open' = ole_workbook
EXPORTING
#1 = i_filename. "文件名
*->get Sheet
DATA lv_process_text TYPE string.
DATA(l_count) = lines( ct_sheetname )."Sheets 名称
LOOP AT ct_sheetname INTO DATA(ls_sheetname).
DATA(l_tabix) = sy-tabix.
* DATA(l_percentage) = l_tabix / l_count * 100.
* ##NO_TEXT
* lv_process_text = 'Uploading Sheet:' && ls_sheetname-sheetname.
*
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
* percentage = l_percentage
* text = lv_process_text.
GET PROPERTY OF ole_workbook 'Worksheets' = ole_worksheets
EXPORTING
#1 = ls_sheetname-sheetname.
lw_tabc-sheetname = ls_sheetname-sheetname.
CALL METHOD OF ole_worksheets 'Activate'.
lv_begin_col = ls_sheetname-startcol."开始列
lv_end_col = ls_sheetname-endcol."开始行
lv_begin_row = 0.
lv_end_row = 0.
lv_add_rows = ls_sheetname-every_copy_lines.
CLEAR lv_subrc.
WHILE lv_subrc IS INITIAL.
IF lv_begin_row IS INITIAL.
lv_begin_row = ls_sheetname-startrow.
lv_end_row = lv_add_rows.
ELSE.
lv_begin_row = lv_begin_row + lv_add_rows.
lv_end_row = lv_end_row + lv_add_rows.
ENDIF.
CALL METHOD OF
ole_worksheets
'Cells' = ole_cell_begin
EXPORTING
#1 = lv_begin_row
#2 = lv_begin_col.
CALL METHOD OF
ole_worksheets
'Cells' = ole_cell_end
EXPORTING
#1 = lv_end_row
#2 = lv_end_col.
CALL METHOD OF
ole_worksheets
'RANGE' = ole_range
EXPORTING
#1 = ole_cell_begin
#2 = ole_cell_end.
CALL METHOD OF
ole_range
'SELECT'.
IF sy-subrc <> 0.
EXIT.
ENDIF.
CALL METHOD OF
ole_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.
CALL METHOD OF
ole_excel
'QUIT'.
##NO_TEXT
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
lv_subrc = 4.
LOOP AT lt_excel_tab INTO lw_excel_tab.
lw_excel_tab_tmp = lw_excel_tab.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN lw_excel_tab_tmp WITH space.
IF NOT ( lw_excel_tab_tmp = space OR lw_excel_tab_tmp IS INITIAL ).
APPEND lw_excel_tab TO lw_tabc-context[].
CLEAR lv_subrc.
ENDIF.
ENDLOOP.
CLEAR lt_excel_tab.
ENDWHILE.
DATA: lv_rc TYPE i.
* clear clipboard
CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
data = lt_excel_tab
CHANGING
rc = lv_rc
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
APPEND lw_tabc TO lt_tabc.
CLEAR:lw_tabc.
CALL METHOD OF
ole_worksheets
'COLSE'.
ENDLOOP.
ct_tabc = lt_tabc.
CALL METHOD OF
ole_excel
'QUIT'.
FREE OBJECT:
ole_excel ,
ole_workbooks ,
ole_workbook ,
ole_worksheets ,
ole_worksheet ,
ole_cell_begin ,
ole_cell_end ,
ole_range .
ENDMETHOD.
ENDCLASS.边栏推荐
- Codeforces Round #721 (Div. 2)
- Service gateway of microservices
- 医美大刀,砍向00后
- Macro task and micro task understanding
- Teach you how to print your own log -- how to customize log4j2 components
- 管理系統-ITclub(下)
- PE买下一家内衣公司
- This set of steps for performance testing using JMeter includes two salary increases and one promotion
- 对话乔心昱:用户是魏牌的产品经理,零焦虑定义豪华
- 渗透学习-靶场篇-dvwa靶场详细攻略(持续更新中-目前只更新sql注入部分)
猜你喜欢

DCC888 :Register Allocation

渗透学习-靶场篇-dvwa靶场详细攻略(持续更新中-目前只更新sql注入部分)

元气森林的5元有矿之死

初识C语言 第二弹

Management system itclub (Part 2)

The "business and Application Security Development Forum" held by the ICT Institute was re recognized for the security capability of Tianyi cloud

Use Fiddler to simulate weak network test (2g/3g)

Système de gestion - itclub (II)

Dialogue with Qiao Xinyu: the user is the product manager of Wei brand, and zero anxiety defines luxury

使用sqlite3语句后出现省略号 ... 的解决方法
随机推荐
Basic knowledge of loop traversal and function
Conversion between flat array and JSON tree
ABAP essay-excel-3-batch import (breaking through 9999 lines of standard functions)
《7天学会Go并发编程》第六天 go语言Sync.cond的应用和实现 go实现多线程联合执行
“顶流爱豆制造机”携手四个产业资本,做LP
6G显卡显存不足出现CUDA Error:out of memory解决办法
Record a list object traversal and determine the size of the float type
渗透学习-靶场篇-dvwa靶场详细攻略(持续更新中-目前只更新sql注入部分)
Start the start php
Management system itclub (Part 2)
Is it safe for GF futures to open an account?
关于davwa的SQL注入时报错:Illegal mix of collations for operation ‘UNION‘原因剖析与验证
First knowledge of the second bullet of C language
Teach you how to print your own log -- how to customize log4j2 components
Structured machine learning project (II) - machine learning strategy (2)
[microservices] (16) -- distributed transaction Seata
Penetration learning - shooting range chapter -dvwa shooting range detailed introduction (continuous updating - currently only the SQL injection part is updated)
7 jours d'apprentissage de la programmation simultanée go 7 jours de programmation simultanée go Language Atomic Atomic Atomic actual Operation contains ABA Problems
管理系統-ITclub(下)
同花顺炒股软件可靠吗??安全嘛?