当前位置:网站首页>ABAP随笔-EXCEL-3-批量导入(突破标准函数的9999行)
ABAP随笔-EXCEL-3-批量导入(突破标准函数的9999行)
2022-06-27 16:54:00 【Tab Zhu】
01
EXCEL批量导入2-突破9999行的限制
废话不多说,直接执行:
关键是使用了OLE的方法,使用粘贴板的功能从excel中每次复制自己规定的数据量,从而突破了9999行。
FORM frm_get_excel_2 .
data lv_filename TYPE string.
lv_filename = p_file.
CALL METHOD zcl_document_jxzhu=>update_excel_ole
EXPORTING
pi_filename = lv_filename "excel路径
pi_sheetname = 'Sheet1' "sheet name
pi_startline = '2' "从第几行开始上载
pi_startcolumn = '1' "从第几列开始上载
pi_every_copy_endline = '300' "每次从打开的excel中复制的行数 (建议不要太大,因为我们复制粘贴的时候,粘贴板是有大小限制的
pi_endcolumn = '30' "到第几列结束
* pi_skpcl_tbl = '0'
CHANGING
pt_tab = lt_zmmt001
EXCEPTIONS
open_file_err = 1.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH sy-msgv1 sy-msgv2 sy-msgv3.
STOP.
ENDIF.
cl_demo_output=>display( lt_zmmt001 ).
ENDFORM.方法如下:
METHOD update_excel_ole.
DATA:
lt_tabc TYPE STANDARD TABLE OF zchar3000,”这个值需要大于excel一行的数据
lw_tabc TYPE zchar3000,
lv_tabix TYPE sy-tabix,
lt_cell TYPE STANDARD TABLE OF string,
lw_cell TYPE string,
lv_cell_tabix TYPE sy-tabix.
DATA:
lv_column_num TYPE i,
lv_column_skp TYPE i,
lw_tab_ref TYPE REF TO data.
DATA:
lo_cx_root TYPE REF TO cx_root.
DATA:
lv_message TYPE string.
DATA
descr_ref TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS:
<lw_tab> TYPE any,
<lv_value> TYPE any.
CREATE DATA lw_tab_ref LIKE LINE OF pt_tab.
ASSIGN lw_tab_ref->* TO <lw_tab>.
lv_column_skp = pi_skpcl_tbl.
CALL METHOD zcl_document_jxzhu=>excel_2_inner_table
EXPORTING
pi_filename = pi_filename
pi_sheetname = pi_sheetname
pi_every_copy_endline = pi_every_copy_endline
pi_endcolumn = pi_endcolumn
CHANGING
pt_tab = lt_tabc
EXCEPTIONS
file_open_error = 1
OTHERS = 2.
*->把数据切割到内表
LOOP AT lt_tabc INTO lw_tabc.
lv_tabix = sy-tabix.
CHECK lv_tabix >= pi_startline.
CLEAR lt_cell.
SPLIT lw_tabc AT cl_abap_char_utilities=>horizontal_tab INTO TABLE lt_cell.
LOOP AT lt_cell INTO lw_cell.
lv_cell_tabix = sy-tabix.
lv_column_num = lv_cell_tabix - pi_startcolumn + 1 + lv_column_skp.
CHECK lv_column_num > 0.
ASSIGN COMPONENT lv_column_num OF STRUCTURE <lw_tab> TO <lv_value>.
CHECK sy-subrc = 0.
TRY.
<lv_value> = lw_cell.
CATCH cx_root INTO lo_cx_root.
descr_ref ?= cl_abap_typedescr=>describe_by_data( pt_tab ).
READ TABLE descr_ref->components INTO DATA(ls_name) INDEX lv_column_num.
lv_message = lv_tabix && 'Lines' && lv_column_num && 'Name of column is ' && ls_name-name && 'error value:' && lw_cell.
MESSAGE e001(00) WITH lv_tabix lv_column_num lv_message RAISING open_file_err.
ENDTRY.
ENDLOOP.
IF <lw_tab> IS NOT INITIAL.
APPEND <lw_tab> TO pt_tab.
CLEAR <lw_tab>.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD EXCEL_2_INNER_TABLE.
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.
LV_ADD_ROWS = PI_EVERY_COPY_ENDLINE.
DATA:
LT_EXCEL_TAB TYPE STANDARD TABLE OF ZCHAR3000,
LW_EXCEL_TAB TYPE ZCHAR3000,
LW_EXCEL_TAB_TMP TYPE ZCHAR3000.
*->生成Excel object
CREATE OBJECT OLE_EXCEL 'Excel.Application'.
IF SY-SUBRC <> 0.
MESSAGE E001(00) 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 = PI_FILENAME.
*->取得Sheet
GET PROPERTY OF OLE_WORKBOOK 'Worksheets' = OLE_WORKSHEETS
EXPORTING
#1 = PI_SHEETNAME.
IF SY-SUBRC = 0.
CALL METHOD OF
OLE_WORKSHEETS
'Activate'.
ELSE.
GET PROPERTY OF OLE_EXCEL 'ACTIVESHEET' = OLE_WORKSHEETS.
IF SY-SUBRC NE 0.
CALL METHOD OF
OLE_EXCEL
'QUIT'.
MESSAGE E001(00) WITH 'error in open Sheet , please check Sheet name' RAISING FILE_OPEN_ERROR.
ENDIF.
ENDIF.
*->把Sheet上数据Copy 到 ClipBoard
LV_BEGIN_COL = 1.
LV_END_COL = PI_ENDCOLUMN.
LV_BEGIN_ROW = 0.
LV_END_ROW = 0.
"当复制内容为空的时候,LV_SUBRC = 4.
WHILE LV_SUBRC IS INITIAL.
IF LV_BEGIN_ROW IS INITIAL.
LV_BEGIN_ROW = 1.
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'.
MESSAGE 'Error during import of clipboard contents' TYPE 'A'.
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 PT_TAB.
CLEAR LV_SUBRC.
ENDIF.
ENDLOOP.
CLEAR LT_EXCEL_TAB.
ENDWHILE.
DATA:
LV_RC TYPE I.
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.
* CALL METHOD OF
* ole_worksheets
* 'COLSE'.
* CALL METHOD OF
* ole_workbook
* 'COLSE'.
* CALL METHOD OF
* ole_workbooks
* 'CLOSE'.
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.边栏推荐
- How to turn off the server terminal name of vscode
- Contest3182 - the 39th individual training match for 2021 freshmen_ E: ringring
- Hikvision Tools Manager海康威视工具大全(含SADP、录像容量计算等工具)百万安防从业者的实用工具
- Galaxy Kirin V10 system activation
- Market status and development prospect forecast of phenethyl resorcinol for skin care industry in the world in 2022
- MFS distributed file system
- 脉脉热帖:为啥大厂都热衷于造轮子?
- Market status and development prospect forecast of global aircraft hose industry in 2022
- 为什么要从 OpenTSDB 迁移到 TDengine
- Redis 原理 - String
猜你喜欢

How to use the low code platform of the Internet of things for picture management?

明美新能源冲刺深交所:年应收账款超6亿 拟募资4.5亿

The first in China! EMQ joined Amazon cloud technology's "startup acceleration - global partner network program"
![[elt.zip] openharmony paper Club - witness file compression system erofs](/img/ad/5c3363b7536d495f153aa0130a10f1.png)
[elt.zip] openharmony paper Club - witness file compression system erofs

PostgreSQL数据库WAL——资源管理器RMGR

MySQL数据库登录和退出的两种方式

SQL update批量更新

Contest3182 - the 39th individual training match for 2021 freshmen_ F: ss

Don't worry. This is the truth about wages in all industries in China

Win10 LTSC 2021 wsappx CPU 占用高
随机推荐
Characteristics of time series data
你知道 log4j2 各项配置的全部含义吗?带你了解 log4j2 的全部组件
TDengine在数控机床监控中的应用
国产数据库认证考试指南汇总(2022年6月16日更新)
MFS distributed file system
Is Guosen Securities a state-owned enterprise? Is it safe to open an account with Guosen Securities?
Technology sharing | introduction to kubernetes pod
国际数字经济学院、华南理工 | Unified BERT for Few-shot Natural Language Understanding(用于小样本自然语言理解的统一BERT)
推荐几个开源的物联网平台
PostgreSQL数据库WAL——资源管理器RMGR
实施MES管理系统前,要对哪些问题进行评估
中国工业软件市场研究报告出炉,力控SCADA、MES丰富国产工业软件生态
How to use the low code platform of the Internet of things for picture management?
信息学奥赛一本通 1335:【例2-4】连通块
时序数据库(Time Series Database)的存储引擎要想做到极致,还得自研
在arcgis中以txt格式导出点的坐标
Current market situation and development prospect forecast of global 3,3 ', 4,4' - biphenyltetracarboxylic dianhydride industry in 2022
Common errors and solutions of MySQL reading binlog logs
深度学习和神经网络的介绍
R language statistics a program running time function system time