zoukankan      html  css  js  c++  java
  • 使用WPS,把Excel转Pdf所碰到的坑

    使用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文件移到其他地方或者改名.

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/zitjubiz/p/WPS_Excel2Pdf.html
Copyright © 2011-2022 走看看