Excel上传返回空记录

2020-08-21 03:27发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的

我正在尝试使用此 OLE Excel上传功能将excel记录上传到SAP。

方法:调用方法cl_gui_frontend_services =>剪贴板导入。

它可以正常工作一段时间,后来只给出空的内部表记录。

在调用上述导入方法之前,我调用了 CALL FUNCTION'CONTROL_FLUSH' cl_gui_cfw => flush

我在Excel中有845000条记录。

在第一次迭代中:我大约只有770000条记录

在第二次迭代中:我大约只有667000条记录

在第三次迭代中,成功从excel上传了845000条记录。 (成功)

2小时后,我尝试了相同的操作。

在第一次迭代中,我从以下方法中得到了0条记录:CALL METHOD cl_gui_frontend_services => clipboard_import。

在第二次迭代中,我也从以下方法中获得了0条记录:调用方法cl_gui_frontend_services => clipboard_import。

使用ABAP 740


在FM以下循环调用此循环以动态获取记录,每次我多次从excel读取35000条记录直到最后一行。


我的代码

功能zmm_mass_xl_to_internal_table。
*" --------------------------------- -------------------------------------
*" *"本地接口:
*" IMPORTING
*" VALUE(文件名)像RLGRAP-FILENAME
*" VALUE(I_BEGIN_COL)TYPE I
*" VALUE(I_BEGIN_ROW)TYPE I
*" VALUE(I_END_COL)TYPE I < br> *" VALUE(I_END_ROW)TYPE I
*"表格
*" INTERN STRUCTURE ZALSMEX_TABLINE OPTIONAL
*" ET_INT_EXCEL STRUCTURE ZMM_EXCEL_DATA OPTIONAL
*" EXCEPTIONS
*" * INTERSONIST_PARENT " UPLOAD_OLE
*" ------------------------------------------- ---------------------------
*///*标准FM'ALSM_EXCEL_TO_INTERNAL_TABLE'的副本

常量: wl_hex_tab类型x值9.
**
数据loc_int_excel类型ty_t_sender。
数据loc_separator类型c。
数据loc_application类型ole2_object。
数据loc_workbook类型ole2_object。
数据2 。
数据loc_worksheet类型ole2_object。
数据h_cell类型ole2_object。
DAT 一个h_cell1 TYPE ole2_object。
DATA p_rc TYPE i。
DATA wf_clear TYPE char1。
DATA lwf_string TYPE字符串。
DATA lwf_string1 TYPE字符串。
DATA lwf_string2 TYPE字符串。
FIELD- 符号:
"""""""""""""""""""""""""""""""""""""""""""" """""""""""""
清除:loc_int_excel,
loc_separator,
loc_application,
loc_workbook,
loc_range,
loc_worksheet,
h_cell,
h_cell1,
p_rc,
wf_clear,
lwf_string,
lwf_string1,
lwf_string2。
""""""""""""""""" """""""""""""""""""""""""""""""""""
* * MakrofürFehlerbehandlung der方法
定义 m_message。
情况sy-subrc。
当0.
时1.
消息ID sy-msgid类型sy-msgty编号sy-msgno
与sy-msgv1 sy-msgv2 sy- msgv3 sy-msgv4。
其他。 请提高上载ole。
结束。
定义结束。

*检查参数
如果i_begin_row> i_end_row。 RAISE inconsistent_parameters。 ENDIF。
如果i_begin_col> i_end_col。 RAISE inconsistent_parameters。 ENDIF。

*设置分隔符。 直接移动是不够的(由于十六进制类型)
ASSIGN loc_separator TO 类型'X'。
= wl_hex_tab。

*在Excel中打开文件
IF loc_application -header =空间或loc_application-handle = -1。
创建对象loc_application'Excel.Application'。
m_message。
ENDIF。
loc_application调用方法'Workbooks'= loc_workbook。
m_message。
"""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""
""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""
"进度指示器
lwf_string1 = i_begin_row。< br> lwf_string2 = i_end_row。
将text-009 lwf_string1'to'lwf_string2插入到lwf_string中,以空格分隔。
呼叫功能'SAPGUI_PROGRESS_INDICATOR'
导出
文本= lwf_string"。
" """""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""
"""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""
loc_workbook的调用方法'打开'
导出
#1 =文件名。
m_message。
*设置应用程序'Visible'的属性=1。
* m_message。
获取loc_application'ACTIVESHEET'的属性= loc_worksheet。
m_message。

* 标记整个电子表格
loc_worksheet的调用方法'Cells'= h_cell
导出
#1 = i_begin_row
#2 = i_begin_col。
m_message。
loc_worksheet调用方法'Cells' = h_cell1
导出
#1 = i_end_row
#2 = i_end_col。
m_message。

调用loc_worksheet'RANGE'的方法= loc_range
导出
#1 = h_cell
#2 = h_cell1。
m_message。
调用loc_range'SELECT'的方法。
m_message。

*将标记的区域(整个电子表格)复制到剪贴板
>调用loc_range'COPY'的方法。
m_message。

*如果没有控件刷新,CLPB_IMPORT将找不到任何数据
调用功能'CONTROL_FLUSH'
例外情况
其他= 3。

*将剪贴板读入ABA P.
呼叫方法cl_gui_frontend_services =>剪贴板输入
导入
数据= loc_int_excel
例外情况
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
其他= 4。
如果sy-subrc =0。
et_int_excel [] = loc_int_excel []。
ENDIF。
**
刷新loc_int_excel。
调用方法cl_gui_frontend_services => clipboard_export
导入
data = loc_int_excel
更改
rc = p_rc
例外情况
cntl_error = 1
其他=4。

*退出Excel并释放ABAP对象-不幸的是,这 不会终止
* Excel进程
loc_application'QUIT'的调用方法。
m_message。
* >>>>>更新说明575877
*终止它的Excel进程 释放所有使用过的对象所必需
FREE OBJECT h_cell。 m_message。
免费对象h_cell1。 m_message。
免费对象loc_range。 m_message。
免费对象loc_worksheet。 m_message。
免费对象loc_workbook。 m_message。
免费对象loc_application。 m_message。
* >>>>>更改结束说明575877

*如果没有控件刷新,CLPB_IMPORT将找不到任何数据
CALL FUNCTION'CONTROL_FLUSH'
EXCEPTIONS
其他= 3.

*最终刷新
调用方法cl_gui_cfw =>刷新
例外情况
cntl_system_error = 1
cntl_error = 2
其他= 3.
结束功能。


关于

巴拉。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的

我正在尝试使用此 OLE Excel上传功能将excel记录上传到SAP。

方法:调用方法cl_gui_frontend_services =>剪贴板导入。

它可以正常工作一段时间,后来只给出空的内部表记录。

在调用上述导入方法之前,我调用了 CALL FUNCTION'CONTROL_FLUSH' cl_gui_cfw => flush

我在Excel中有845000条记录。

在第一次迭代中:我大约只有770000条记录

在第二次迭代中:我大约只有667000条记录

在第三次迭代中,成功从excel上传了845000条记录。 (成功)

2小时后,我尝试了相同的操作。

在第一次迭代中,我从以下方法中得到了0条记录:CALL METHOD cl_gui_frontend_services => clipboard_import。

在第二次迭代中,我也从以下方法中获得了0条记录:调用方法cl_gui_frontend_services => clipboard_import。

使用ABAP 740


在FM以下循环调用此循环以动态获取记录,每次我多次从excel读取35000条记录直到最后一行。


我的代码

功能zmm_mass_xl_to_internal_table。
*" --------------------------------- -------------------------------------
*" *"本地接口:
*" IMPORTING
*" VALUE(文件名)像RLGRAP-FILENAME
*" VALUE(I_BEGIN_COL)TYPE I
*" VALUE(I_BEGIN_ROW)TYPE I
*" VALUE(I_END_COL)TYPE I < br> *" VALUE(I_END_ROW)TYPE I
*"表格
*" INTERN STRUCTURE ZALSMEX_TABLINE OPTIONAL
*" ET_INT_EXCEL STRUCTURE ZMM_EXCEL_DATA OPTIONAL
*" EXCEPTIONS
*" * INTERSONIST_PARENT " UPLOAD_OLE
*" ------------------------------------------- ---------------------------
*///*标准FM'ALSM_EXCEL_TO_INTERNAL_TABLE'的副本

常量: wl_hex_tab类型x值9.
**
数据loc_int_excel类型ty_t_sender。
数据loc_separator类型c。
数据loc_application类型ole2_object。
数据loc_workbook类型ole2_object。
数据2 。
数据loc_worksheet类型ole2_object。
数据h_cell类型ole2_object。
DAT 一个h_cell1 TYPE ole2_object。
DATA p_rc TYPE i。
DATA wf_clear TYPE char1。
DATA lwf_string TYPE字符串。
DATA lwf_string1 TYPE字符串。
DATA lwf_string2 TYPE字符串。
FIELD- 符号:
"""""""""""""""""""""""""""""""""""""""""""" """""""""""""
清除:loc_int_excel,
loc_separator,
loc_application,
loc_workbook,
loc_range,
loc_worksheet,
h_cell,
h_cell1,
p_rc,
wf_clear,
lwf_string,
lwf_string1,
lwf_string2。
""""""""""""""""" """""""""""""""""""""""""""""""""""
* * MakrofürFehlerbehandlung der方法
定义 m_message。
情况sy-subrc。
当0.
时1.
消息ID sy-msgid类型sy-msgty编号sy-msgno
与sy-msgv1 sy-msgv2 sy- msgv3 sy-msgv4。
其他。 请提高上载ole。
结束。
定义结束。

*检查参数
如果i_begin_row> i_end_row。 RAISE inconsistent_parameters。 ENDIF。
如果i_begin_col> i_end_col。 RAISE inconsistent_parameters。 ENDIF。

*设置分隔符。 直接移动是不够的(由于十六进制类型)
ASSIGN loc_separator TO 类型'X'。
= wl_hex_tab。

*在Excel中打开文件
IF loc_application -header =空间或loc_application-handle = -1。
创建对象loc_application'Excel.Application'。
m_message。
ENDIF。
loc_application调用方法'Workbooks'= loc_workbook。
m_message。
"""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""
""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""
"进度指示器
lwf_string1 = i_begin_row。< br> lwf_string2 = i_end_row。
将text-009 lwf_string1'to'lwf_string2插入到lwf_string中,以空格分隔。
呼叫功能'SAPGUI_PROGRESS_INDICATOR'
导出
文本= lwf_string"。
" """""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""
"""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""
loc_workbook的调用方法'打开'
导出
#1 =文件名。
m_message。
*设置应用程序'Visible'的属性=1。
* m_message。
获取loc_application'ACTIVESHEET'的属性= loc_worksheet。
m_message。

* 标记整个电子表格
loc_worksheet的调用方法'Cells'= h_cell
导出
#1 = i_begin_row
#2 = i_begin_col。
m_message。
loc_worksheet调用方法'Cells' = h_cell1
导出
#1 = i_end_row
#2 = i_end_col。
m_message。

调用loc_worksheet'RANGE'的方法= loc_range
导出
#1 = h_cell
#2 = h_cell1。
m_message。
调用loc_range'SELECT'的方法。
m_message。

*将标记的区域(整个电子表格)复制到剪贴板
>调用loc_range'COPY'的方法。
m_message。

*如果没有控件刷新,CLPB_IMPORT将找不到任何数据
调用功能'CONTROL_FLUSH'
例外情况
其他= 3。

*将剪贴板读入ABA P.
呼叫方法cl_gui_frontend_services =>剪贴板输入
导入
数据= loc_int_excel
例外情况
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
其他= 4。
如果sy-subrc =0。
et_int_excel [] = loc_int_excel []。
ENDIF。
**
刷新loc_int_excel。
调用方法cl_gui_frontend_services => clipboard_export
导入
data = loc_int_excel
更改
rc = p_rc
例外情况
cntl_error = 1
其他=4。

*退出Excel并释放ABAP对象-不幸的是,这 不会终止
* Excel进程
loc_application'QUIT'的调用方法。
m_message。
* >>>>>更新说明575877
*终止它的Excel进程 释放所有使用过的对象所必需
FREE OBJECT h_cell。 m_message。
免费对象h_cell1。 m_message。
免费对象loc_range。 m_message。
免费对象loc_worksheet。 m_message。
免费对象loc_workbook。 m_message。
免费对象loc_application。 m_message。
* >>>>>更改结束说明575877

*如果没有控件刷新,CLPB_IMPORT将找不到任何数据
CALL FUNCTION'CONTROL_FLUSH'
EXCEPTIONS
其他= 3.

*最终刷新
调用方法cl_gui_cfw =>刷新
例外情况
cntl_system_error = 1
cntl_error = 2
其他= 3.
结束功能。


关于

巴拉。

付费偷看设置
发送
2条回答
悠然的二货
1楼-- · 2020-08-21 04:02

我的眼睛太粗了。

请使用CODE按钮设置代码格式,以便以更加用户友好的格式(彩色)显示代码。

bbpeas
2楼-- · 2020-08-21 03:56

使用abap2xlsx的人不会将时间浪费在这种错误上...

一周热门 更多>