点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
人们好,
我无法从多张纸上读取AL11上的excel文件的数据。
该程序对于另一个excel可以正常运行,但是对于此特定的excel表却无法运行。
对于o_spreadsheet-> get_ranges_data方法,它进入无限循环。 调试时,这种情况下对象句柄将变为-1。
这是代码:
数据:lv_len TYPE sy-tabix,
lv_filenamesize TYPE drao-orln,
lv_lines TYPE sy-tabix,
lt_rcgrepfile TYPE STANDARD表,bapiconten,
ls_rcgrepfile TYPE bapiconten, lt_sheet TYPE soi_sheets_table,
lv_top TYPE i VALUE 1,
lt_data1 TYPE soi_generic_table,
lt_data TYPE soi_generic_table,
ls_data TYPE ty_data,
lt_ranges TYPE soi_range_list,
ls_retcode。 类别c_oi_errors定义负载。
*为容器创建实例控件
调用方法c_oi_container_control_creator => get_container_control
IMPORTING
控件= o_control
错误= o_error。
IF o_error-> has_failed ='X'。
调用方法o_error-> raise_message
导出
type ='E'。
ENDIF。
*建立与GUI控件的连接
调用方法o_control-> init_control
导出
r3_application_name ='Excel文档容器'
inplace_enabled ='X'
父= cl_gui_container => screen0
导入
错误= o_error。
如果o_error-> has_failed ='X'。
呼叫方法o_error-> raise_message
导出
type ='E'。
ENDIF。
*创建文档代理
呼叫方法o_control-> get_document_proxy
导出
document_type = soi_doctype_excel_sheet
导入
document_proxy = o_document
错误= o_error。
如果o_error-> has_failed ='X '。
调用方法o_error-> raise_message
导出
type ='E'。
ENDIF。
TRY。
OPEN DATASET p_file用于在二进制模式下输入。 br> *打开数据集p_file以使用SMART LINEFEED进行默认编码以文本模式输入。
如果sy-subrc =0。
做。
清除lv_len。
清除ls_rcgrepfile。
读取数据集p_file INTO ls_rcgrepfile长度lv_len。
*读取数据集p_file INTO ls_rcgrepfile。
IF sy-subrc <> 0.
IF lv_len> 0.
lv_filenamesize = lv_filenamesize + lv_len。
APPEND TO Ls_rcg 。
ENDIF。
退出。
ENDIF。
lv_filenamesize = lv_filenamesize + lv_len。
附加ls_rcgrepfi le TO lt_rcgrepfile。
ENDDO。
ENDIF。
描述表lt_rcgrepfile线lv_lines。
CLOSE DATASET p_file。
捕获cx_root到g_ex_root。
清除gv_msg。
gv_msg = g_ex_root-> get_text()。
如果gv_msg不是INITIAL。
sy-subrc =4。
ENDIF。
ENDTRY。
*在SAPWORKDIR中打开电子表格
调用方法o_document-> open_document_from_table
导出
document_size = CONV#(lv_filenamesize)
document_table = lt_rcgrepfile []
* document_title = ''
* no_flush =''
open_inplace = abap_true
* open_readonly =''
* protect_document =''
* onsave_macro =''
* startup_macro =``
>导入
错误= o_error。
如果o_error-> has_failed ='X'。
调用方法o_error-> raise_message
导出
类型='E'。
ENDIF。
*打开电子表格接口
调用方法o_document-> get_spreadsheet_interface
导出
no_flush =''
导入
sheet_interface = o_sp readsheet
错误= o_error。
如果o_error-> has_failed ='X'。
调用方法o_error-> raise_message
导出
类型='E'。
ENDIF 。
调用方法o_spreadsheet-> get_sheets
*导出
* no_flush =''
*更新= -1
IMPORTING
图纸= lt_sheets
错误= o_error 。
将lt_sheets循环到数据(ls_sheets)。
lv_top =2。
调用方法o_spreadsheet-> select_sheet
导出
名称= ls_sheets-sheet_name
导入
>错误= o_error。
如果o_error-> has_failed ='X'。
退出。
ENDIF。
DO。
调用方法o_spreadsheet-> set_selection
导出
top = lv_top
左= 1
行='5000'
列='3'。
调用方法o_spreadsheet-> insert_range
导出
名称='Test'< br>行='5000'
列='3'
no_flush =''
导入
错误= o_error。
如果o_error-> has_failed ='X'。
退出 。
ENDIF。
刷新lt_data1。
调用方法o_spreadsheet-> get_ranges_data
E XPORTING
全部='X'
导入
内容= lt_data1
错误= o_error
CHANGING
范围= lt_ranges。
如果lv_top =1。
删除lt_data1在哪里 row ='1'。
ENDIF。
读取表lt_data1到DATA(ls_data1)中,其中KEY列='2'
值=空间。
如果sy-subrc =0。" AND ls_data1- 行<1000。
*删除lt_data1值是初始值还是空格=
将lt_data1的行添加到lt_data。
退出。
ENDIF。
*删除lt_data1值是初始值还是OR 值=空间。
在lt_data1到lt_data中追加行。
lv_top = lv_top +5000。
ENDDO。
ENDLOOP。
清除ls_data1。
将lt_data放入LOs_data1 。
案例ls_data1列。
何时1.
将ls_data1值移动到ls_data-banka。
当2.
将ls_data1值移动到ls_data-ifsc。
何时3 。
将ls_data1值移动到ls_data分支。
何时4.
将ls_data1值移动到ls_data地址。
当5.
将ls_data1值移动到ls_data-contact。 br>何时6.
将ls_data1值移至ls_d ata-city。
何时7.
将ls_data1值移动到ls_data-district。
何时8.
将ls_data1值移动到ls_data-state。
附加ls_data到gt_data。
清除ls_data。
在其他情况下。
结束。
ENDLOOP。
*删除gt_data索引1.
在gt_data所在的ifsc =空格处删除。
在获取范围数据之前,您是否可以尝试先定义范围(并在该方法中排除参数ALL):
如果您在编辑器中使用代码按钮粘贴代码,使代码具有良好的格式和可读性,就更有可能获得帮助。
此方法有效,谢谢:)
Disha ,您已经在某些地方检查(如果o_error-> has_failed ='X'。) 呼叫,那么为什么现在要检查sy-subrc?
一周热门 更多>