产品文档 / Excel催化剂
『项目实战』另辟蹊径,在WebApi里调用Excel程序完成自动化流程
背景介绍 最近的项目里,需要用到一个功能,发布一个WebApi接口供外部系统调用,然后在接口里收到外部程序的一些确认消息后,再调用Excel完成一些其他自动化操作生成一些文件存储起来。 在整个过程中,Excel是不可替代的,因为用到Excel很多高级的功能,如将Excel文件转换为PDF文件等。
背景介绍
最近的项目里,需要用到一个功能,发布一个WebApi接口供外部系统调用,然后在接口里收到外部程序的一些确认消息后,再调用Excel完成一些其他自动化操作生成一些文件存储起来。
在整个过程中,Excel是不可替代的,因为用到Excel很多高级的功能,如将Excel文件转换为PDF文件等。不是其他非COM方式调用所能完成的。
虽然在服务端调用OFFICE的方案,可能很多专业程序员非常反感,因为效率性能低,同时不能应对并发多请求。但特定项目里,它的确是需要的,而且这些性能、并发等问题,不是对项目有关键性影响因素的。
就像笔者的项目,只是收到消息后,自己后台静默完成一些自动化操作,不用给调用者返回最终的结果物,时效性要求也不高,可以后台慢慢完成。通常这些消息是很低频的,所以也没有高并发问题。
中途挫折
本来在开发环境下,直接在WebApi接口里,用异步方式发起一个调用Excel的自动化方法,然后返回接口调用的完成结果,以为就很完美解决了。
结果却是,在开发环境下,的确没问题,用VS的Debug模式下的IIS_Express,确实可以正常运行,异步方法启动Excel成功,并且调用Excel的对象模型完成了预期的自动化操作。
但部署到ISS环境里,就马上不灵了。接口返回了错误,提示没有权限访问之类的。

在百度捣鼓了一轮,按网上的教程设置了什么DCOM的配置之类的,也还是不行,如下图。

也按群友提供的线索,把应用程序池的标识改为管理员了。让WebAPI以管理员的权限运行。
当时测试时不可以,写文时,貌似又可以了,严重怀疑是上面这些设置要重启操作,当时没进行重启。

以上的设置大概就是把整个网站使用管理员权限运行,然后再上面的DCOM设置里,