问题: EXCEl 导入成内表时,单元格数据存在换行符#啊#情况以及长度超过256,且不能.txt文件格式上传。
造成的原因是用户使用了0D0A (16进制)做为换行符,abap中是显示'##' 在SAP中对应的是cl_abap_char_utilities=>cr_lf . (cl_abap_char_utilities)有大量特殊字符
1. “0D”是把光标移到同一行的顶头——回车(CR)。
2、“0A”是把光标移到下一行——换行(LF)。
3、16进制代码中“0A”是换行,如果只有“0D”,那么光标会回到这一行的开始处,只有“0A“、”0D”一起用,才能使光标到下一行的开始处。
下面是我使用过的方案
一: ALSM_EXCEL_TO_INTERNAL_TABLE 扩展 ZALSMEX_TABLINE 缺点: 无法识别换行,长文本换行后自动row+1 导致错误 处理方法:1. 扩展excle 表行 ALSMEX_TABLINE-value长度 2. 和客户沟通将文件中长文本用txt中显示并且去掉中间空行。用户不同意 方案
二: TEXT_CONVERT_XLS_TO_SAP 缺点: 无法突破256长度限制 处理方法: 尝试复制类下来但是package SOFFICEINTEGRATION 中接口,实施类,以及include 的程序相互嵌套,无法底层更改256长度限制。
upload_xls_file_2_itab 也是同理。
最终解决方案是
结论:用户接受更改模板将长文本放在最后面。
实现方式: 增强的 ZALSM_EXCEL_TO_INTERNAL_TABLE 读取 前面正常数据,OLE read cell 读取最后一列单元格然后拼接的方式实现。