一、背景
我们老大给我一个任务,说是erp下载下来的excle文件,用office可以正常打开,用wps就会缺少行信息,让我改一下,顺便给了我一个文档,是wps厂家的建议。
二、开始研究
我从erp下载下来excle文档,试着用office打开,正常。试着用wps打开,在获取行信息的时候vba代码报错,提示
百度之后发现,是没有添加引用。为什么office就能有引用,wps就没有引用呢,然后我就对比两个的引用有什么不一样,当然中间还走了很多弯路。
office的引用
wps的引用
发现有好几个不一样的,开始从xml这个引用入手,office是3.0,wps是6.0,这跟之前发我的文档wps的厂家说的一样。
接下来就是研究为什么wps会引用6.0,怎么才能让wps引用3.0呢?又经过一堆研究后发现,不管是3.0还是6.0,他的名字参数这些都是一样的
接下来就找BneAddReference方法,看看他是怎么把这两个参数对应成xml6.0的
接下来找到了这个方法,里面的版本对应的是1,我猜测是这样的,xml版本指定为1,在系统上找不到后就会默认选择一个,office选择了3.0,而wps选择了6.0,再看wps厂家给的文档,立马联想到是不是把1改成3就可以了呢?经过测试,真的可以了!那么怎么解决问题时搞定了。这个宏代码去哪里改呢?
三、改宏代码
这些宏代码是跟excle一起下载下来的,那么就去erp的oaf上找。
发现在点击下载的时候,其实就是做了一个a标签页面跳转,那么就找跳转的这个页面CuxPaDelvPG。
发现这里没做什么操作,而是跳转到了FUNC这个地方,FUNC就是上面a标签里的CUX_DLVR_ENG_IMP。这玩意看着怎么也不像是个地址啊,怎么会跳转呢?在老板的帮助下,发现这玩意是个功能。
果然是个功能,发现他跳转的路径其实是个servlet
然后在服务器上全局搜索这个类
find / -name BneApplicationService.class
找到这个类后,发现他就是哥servlet,里面有一堆渲染菜单渲染页面的代码,但是没发现什么可用的信息。
后面杨老板机智过人,突发奇想,既然我们要找这个excle是哪里来的,那么直接找他的下载地址就行了呀
下载地址找到了,他传了4个参数,第三个感觉像是要跳转到下载页面,就在代码里找哪里获取了这个参数。
这个参数对应了一个类
搞了半天发现找错地方了,我去
这玩意才是正确的下载路径
然后进来有慢慢找,最终找到了
接下来就是找我要改的地方
这块就陷入了有一个问题里,当执行下载好的excel时,他会新建一个excel,新建的这个excel里有binMain,而我要改的地方就在binMain模块里,也就是说下载下来的文档里没有binMain这个方法。
我比较幸运,在上面那个类里搜索binMain,返现了createBinMain的方法
进入这个类后发现了
再追进去
终于找到了我要改的地方,将最下面那行里的1改为3,发布,测试,大功告成!