目前在项目中,客户提出了一个比较奇怪的要求。
首先客户提供了我们一个excel模板,这里面有他们的物流和财务的一些算法,需要他们的子公司在线填报。
所以客户要求:
1. 能在IE中直接打开他们的excel模板的副本,让子公司填报。
2. 保证excel计算公式的安全性,包括了整个excel文件的禁止另存为然后单元格的禁止复制,公式栏的隐藏。
3. 要求客户保存之后能把excel的内容以xls文件的形式保存到服务器中,并且存储到数据库中。最近也搜索了很多相关的,大体上似乎可以分为两种思路来完成。
A方案是在客户端上建立一个目录,在用户点击按钮发出请求时,把excel文件以流的形式发送到客户端,然后在客户端(用js?)根据流的内容生成excel文件。然后用Iframe嵌入到IE中。等用户编辑完毕,点击按钮或者excel自己的保存按钮,把内容发送回服务器端,由服务器端完成保存,写入数据库的任务。B方案是在web server上建立一个临时文件,在用户点击按钮发出请求时,服务器端复制一份excel文件到临时文件,然后客户端用IE远程打开这个临时文件中的exce文件,实现在IE中的编辑。后面的操作和A相同。现在遇到的困难主要有以下几点:
1) 在用Iframe实现把excel嵌入IE中时,首先会提示是否下载还是打开,能否去掉这个提示,最好不要是用户自己修改IE设置这样的。其次,在测试的时候,根据机器配置不同,在我同事机器上就算我用了Iframe,他的IE也是重新打开一 个excel文件,而不是在IE中打开。无意中发现了Eclipse打开excel的形式很好,不知道能不能实现那样的效果。2) 通过VBA,已经实现了excel文件以及行、列、单元格对另存为、复制、剪切、快捷键的禁止,并且也隐藏了公式。但是,如果双击单元格进入单元格内进行编辑,还是发现可以复制的,快捷键也没能禁止,不知道为何。还有一个问题就是,如果我通过IE的Iframe形式打开,在光标焦点在excel文件上时,我用IE的另存为,发现另存为的竟然是excel文件,那么我用VBA对excel的禁止另存为就是摆设了。后来我用了window.open,弹出框的形式禁止了IE的菜单栏。但如问题1)一样,在同事机器上,弹出框的Iframe依然无效,他是弹出框了,但excel是重新打开,并不在IE中。3)如何捕捉excel文件保存事件?客户保存了excel,还要写回服务器端,这个如何实现,如何在IE中捕捉这个事件,实在不知道怎么处理。曾考虑过写一个Button,Onclick就是保持操作,一方面保存excel,一方面读出excel的数据,用SQL语句写回数据库。不知大这样行不行,但对于在嵌入IE中的excel可能选取其对象还可行,但遇到异常,不嵌入IE的excel,这样的方式就完全失效了吧。。头大中,谢谢大家啊,帮忙看看,我也是新手,很多东西都不懂。