设为首页 收藏本站
查看: 1335|回复: 0

ABAP无法读取FTP上的excel文件

[复制链接]

尚未签到

发表于 2015-5-29 10:51:52 | 显示全部楼层 |阅读模式
当初写ABAP时,还特地研究了一番ABAP与FTP的连接问题,并为大家做技术分享。但最近写的一个SA文件时,我写了一点:程序从FTP上读取XLS文件,完成数据处理后,将反馈的LOG文件放回FTP。

初一看,几乎没有什么问题。后来当出了问题后,我电话问了好几位ABAP老手,开头的感觉都是说可以做到……但我真正问到怎么做时,要么就反应过来不行,要么就搞错了。

如果是从本机上读取XLS文件,没有问题,调用一个专用的Function( ALSM_EXCEL_TO_INTERNAL_TABLE )就OK了,如果是CSV、TXT格式就更简单了,调用Function(WS_UPLOAD)就搞定,主要是后期数据不需要再转化。以往的程序中,ABAP程序与FTP连接,都需要AP的中转,具体过程为:先连接FTP(Function: FTP_CONNECT),然后发送FTP的命令(FTP_COMMAND)将文件传回AP,最后再关闭FTP连接(FTP_DISCONNECT);然后再用open dataset的方式将AP上的文件打开,一行一行读取数据到内表中进行处理。向FTP上存放数据也是这样的过程,只不过open dataset是用transfer的方式向文件中写入数据,FTP_COMMAND时则上传文件。不过这种方式有一点需要注意,open dataset后我们自然想到close dataset, 但还别忘了delete dataset,否则程序每执行一次,就往AP上放一个文件,文件名相同也就罢了,如果是动态变化的,AP上面的垃圾就很多了。

问题主要是出在open dataset上面。它是一行一行读取文件的,无论是以文本方式打开,或者是其它形式打开。当CSV格式或TXT格式时,没问题;但当为XLS格式时,里面含有很多不可见的东东,打开就几乎全是乱码了。那些Function,都是处理本机与ABAP程序间文件传输的。

对这种小问题掉以轻心,结果却犯了个大错误。还好最后与顾问商量,将文件的格式改为CSV了。

那么,我们可否将日志文件生成XLS文件,再上传到FTP上去呢?答案是可以。其中最重要的是找着TAB符号,ECC6.0之后,可以调用专用的class实现,其中有TAB分隔符的静态变量(上网找了找:cl_abap_char_utilities=>horizontal_tab )。用这个数据将内表中的字段分开写入一个XLS文件就搞定。如果是ECC4.6的话,我是用本地SQL实现的(ORACLE:select chr(9) into :tab from dual)。如果是CSV或者是TXT,就不用这么麻烦找TAB值了。
那么我们就会问,为什么你可以生成XLS文件,却不可以读取XLS文件呢?事实证明,你生成的XLS文件,是可以被读取的。这就是说,如果你将生成的一个XLS文件给用户,然后用户再向里面填写数据,这种文件是可以被open dataset方式成功打开的。但问题是,用户不可能那么听话,每次都用你给的XLS文件来修改。一旦他点右键新建一个XLS文件,那么程序肯定出错或者不成功。其中原因很简单,就是因为程序生成的XLS文件,没有冗余的不可见的东东。

转做助理顾问这点倒是蛮爽的,需要实现什么,写个需求就好了,具体代码交给abaper就好,需求一改,我们动手是少,可abaper就需要改很多代码了。但怎么说我也曾是abaper,这点我还是非常为他们考虑的。


http://blog.erp100.com/home.php?mod=space&uid=52759&do=blog&id=6765165

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-71841-1-1.html 上篇帖子: 国内外FTP搜索引擎的分析与比较 下篇帖子: 使用inet进行FTP传输(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表