但是到了59000行时,接口变成一个数据都没有读到的原因是在是这个函数底层是用OLE的剪切板来做的, 590000行数据量太大剪切板的内存不够了。
你可以改改里面OLE剪切板复制的代码。
参考下面代码看看:(这段代码是在OLE中每一万条复制一次)
DATA: lv_brow TYPE i VALUE -9998,
lv_erow TYPE i.
WHILE lv_erow < i_end_row.
lv_brow = lv_brow + 9999.
lv_erow = lv_erow + 9999.
IF lv_erow > i_end_row.
lv_erow = i_end_row.
ENDIF.
* mark whole spread sheet
CALL METHOD OF
worksheet
'Cells' = h_cell
EXPORTING
#1 = lv_brow
#2 = i_begin_col.
m_message.
CALL METHOD OF
worksheet
'Cells' = h_cell1
EXPORTING
#1 = lv_erow
#2 = i_end_col.
m_message.
CALL METHOD OF
worksheet
'RANGE' = range
EXPORTING
#1 = h_cell
#2 = h_cell1.
m_message.
CALL METHOD OF
range
'SELECT'.
m_message.
* copy marked area (whole spread sheet) into Clippboard
CALL METHOD OF
range
'COPY'.
m_message.
* read clipboard into ABAP
CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data = excel_tab
EXCEPTIONS
cntl_error = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE a037(alsmex).
ENDIF.
PERFORM separated_to_intern_convert TABLES excel_tab lt_intern
USING ld_separator.
LOOP AT lt_intern.
intern-row = lt_intern-row + lv_brow - 1.
intern-col = lt_intern-col.
intern-value = lt_intern-value.
APPEND intern.
ENDLOOP.
* clear clipboard
REFRESH excel_tab.
CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
data = excel_tab
CHANGING
rc = ld_rc
EXCEPTIONS
cntl_error = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
ENDWHILE.