ALSM_EXCEL_TO_INTERNAL_TABLE这是我们经常使用的一个function,用来读取我们upload的EXCEL附件的,但是他有几个问题:每一个cell只能导入前50个字符;若附件超过40000行会发生dump;没有办法读取多个sheet的内容;有时候没读到附件中的内容。
一、每个cell只能导入前50个字符:
修改ALSMEX_TABLINE的结构,然后把function copy出来就可以了。
2、附件内容超过40000行会dump,其实这个function的功能是先将excel的内容复制到剪贴板上,然后读取到ABAP内表上,但是剪贴板有限,所以需要控制 begin_row和end_row,这个function写在do 循环中就可以了。
3、需要增加function import 参数,sheet_name,若为空,保持原逻辑,若sheer_name不为空,则可以读取指定sheet的内容。
*--ADD lian
** set property of application 'Visible' = 1.
** m_message.
IF sheet_name = space."用默认模式
GET PROPERTY OF application 'ACTIVESHEET' = worksheet.
m_message.
ELSE.
*-->可以实现读取多个sheet
CALL METHOD OF application 'WORKSHEETS' = worksheet
EXPORTING #1 = sheet_name.
CALL METHOD OF worksheet 'Activate'.
m_message.
ENDIF.
*---END OF------------------------------------------------
4、有时候excel明明有内容,从剪贴板上却读不出来,写一个DO循环,就可以了。
DO l_times TIMES.
* 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).
EXIT.
ELSE.
IF excel_tab[] IS INITIAL.
WAIT UP TO 1 SECONDS.
ELSE.
EXIT.
ENDIF.
ENDIF.
ENDDO.