OLE EXCEL分批次上载和下载简单介绍

OLE EXCEL分批次上载和下载简单介绍

函数ALSM_EXCEL_TO_INTERNAL_TABLE来读取EXCEL采用OLE的技术,读取的数据速度比较快,其原理就是采用SELECT+COPY的把数据写入剪贴板中,然后调用cl_gui_frontend_services=>clipboard_import的方式把剪贴板数据写入内表。

但是ALSM_EXCEL_TO_INTERNAL_TABLE有其限制,那就是取决于ALSMEX_TABLINE类型

这个类型决定了其上传行数和列数和单元格的长度


而这个类型决定了一行的长度,一般我这边都会改写这两个类型,比如

TYPES:BEGIN OF ty_alsmex_tabline,
      row
(8TYPE n,
      col
(8TYPE n,
      
value(4096TYPE c,
    
END OF ty_alsmex_tabline.

回到如何分批上载OLE EXECL的简单介绍,如果EXECL表比较的话,那么可以尝试分批次写法,以下代码只是简单介绍,如果真实的要处理,需要把下面的代码在ALSM_EXCEL_TO_INTERNAL_TABLE中进行改写(可参考分批上载的模式).(这边的介绍的方法上载的数量是在SAP 内存限制的范围内).

REPORT demo.
DO.
  
PERFORM get_range USING sy-index "当前次数
                          
5000 "倍数
                    
CHANGING begin_row "开始行
                            end_row
"结束行
  
IF end_row > 500000."结束信息
    end_row 
500000.
  
ENDIF.
  excel_begin_row 
begin_row + hline."hline 代表表头行数
  excel_end_row 
end_row + hline.
  
CLEAR lt_intern.
  
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    
EXPORTING
      filename                
''
      i_begin_col             
1
      i_begin_row             
excel_begin_row
      i_end_col               
20
      i_end_row               
excel_end_row
    
TABLES
      intern                  
lt_intern
    
EXCEPTIONS
      inconsistent_parameters 
1
      upload_ole              
2
      
OTHERS                  3.
  
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  
ENDIF.
*经过处理把 lt_intern 转换为SAP 的内表 比如lt_out1
  
APPEND LINES OF lt_out1 TO lt_out.
  
CLEAR lt_out1.
  
IF end_row >= 500000.
    
EXIT.
  
ENDIF.
ENDDO.
*
FORM get_range  USING    index
                         multiple
                
CHANGING low
                         high
.
  high 
index * multiple.
  low  
1  index * multiple.
ENDFORM.                    " GET_RANGE

 

同样分批次主要的主要

DO.
      
CALL METHOD get_range "与上边的Form 出来类似
        
EXPORTING
          
index    sy-index
          multiple 
lines "倍数
        
IMPORTING
          low      
begin_row
          high     
end_row.
      
IF end_row > lines_row"这是内表的行数
        end_row 
lines_row.
      
ENDIF.
      
CLEAR .
      
APPEND LINES OF  FROM begin_row TO end_row TO .
      
CALL METHOD clipboard_export  "写入剪贴板
        
EXPORTING
          lt_data 
.
      excel_begin_row 
begin_row + hline.
      excel_end_row 
end_row + hline.
      
CALL METHOD paste  "黏贴
        
EXPORTING
          col1  
1
          line1 
excel_begin_row
          col2  
col2
          line2 
excel_end_row.
      
IF end_row >= lines_row.
        
EXIT.
      
ENDIF.
    
ENDDO.

具体的注意点可以参考我之前介绍说明接口函数动态下载数据,并实现大数据下载

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/203545/viewspace-1450879/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/203545/viewspace-1450879/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值