使用WPS,把Excel转Pdf所碰到的坑
1. 安装WPS2012 个人版,在项目里引用Com组件Kingsoft.ET2.0 Library,结果提示 出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示。
解决办法就是:选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。
然后噼里啪啦直接在aspx.cs页面写了一段代码:
try { object type = System.Reflection.Missing.Value; ET.ApplicationClass application = null ; ET.workbook book = null ; try { application = new ET.ApplicationClass(); book = (ET.workbook)application.Workbooks.Open(xlspath, type, type, type, type, type, type, type, type, type, type, type, type); book.ExportPdf(pdfpath, "" , "" ); //this.GetFilePath(path)是获取文件路径+文件名(不含后缀) } catch (Exception ex) { } finally { if (book != null ) { book.Close( true , type, type); book = null ; } if (application != null ) { application.Quit(); application = null ; } GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); } } catch (Exception ex) { } } |
测试了一下,可以生成pdf,这么小case,半个小时就搞定了。。。大功告成,然后上传到服务器,运行时却提示
Retrieving the COM class factory for component with CLSID {45540001-5750-5300-4B49-4E47534F4654} failed due to the following error: 80040154 没有注册类别
但是我在服务器已经安装了WPS2012了,怎么会没有找到com组件呢?
是不是没有权限呢,打开管理工具的组件服务,找到KingSoft SpreadSheet 组件,把启动激活访问权限都加上了。还是不行!
(Kingsoft Spreadsheets Application Class--------应用ID{45540001-5750-5300-4B49-4E47534F4654}
把启动激活访问权限Everyone都加上了,运行此应用程序的账号为启动用户)
是不是IIS的进程池账号权限不够呢? 把进程池账号改成LocalSystem。结果还是不行!
是不是网页调WPS有什么限制呢? 那我写一个WinForm程序(Excel2Pdf.exe)去调WPS,然后用网页Call这个WinForm程序(Excel2Pdf.exe)。三板斧使完,还是不行!
怎么办呢?还是洗洗睡了,明天再说了。。。
第二天,在本地电脑用另一个账号登陆测试,结果发现原来网页在本地能成功转成PDF的,现在换了个账号却不行了。难道是WPS的使用权限是跟账号的?
运行WPS2012的安装程序,它默认的安装路径是C:\User\Administrator\... 我猜想它只是安装在某个账号下,而不是Everyone,在网页上的访问账号和管理员账号是不同的,所以就不能调用了。
卸载掉WPS2012,重新下载一个WPS2010的安装程序,它默认的安装路径是C:\Program Files\KingSoft ..., 这个是安装for Everyone的。用这个安装后,在本地和服务器上都可以成功转PDF
这个坑花了2天时间,只怪WPS2012没有提供一个选项Install for Everyone or Just for me.
------------------------
后记, wps的自动升级功能很坑爹,wps2010会自动升级到最新版本,而最新的wps2013是安装到每个用户目录的.
所以要手动把C:\Program Files\KingSoft\wps\office6\ 下面的有关自动升级的exe文件移到其他地方或者改名.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示