精华内容
下载资源
问答
  • wps插件开发
    2019-06-12 21:28:41

    需要对wps写一个小的插件,也就是几行代码的事情,但却碰到了一个坑

    wps中的com组件的调用和MSoffice非常的相似,几乎只需要把包的头修改一下就可以用了。

    比如开发wps文档的插件,需要引用
    1. Kingsoft Add-In Designer
    2. Kingsoft Wps 2.0 Object Library
    3. kingsoft Office 2.0(1.0) Object Library (选2.0的的时候会勾选1.0)

    然后继承一个

    ]
    就可以开始开发了,但是在接下来的事情里面就是一个坑了。

    在OnConnection事件里面添加一条弹出一个框

    MessageBox.Show("aaa");

    设置启动类库设置-》生成中设置com互操作组成,然后编译.

    编译的时候由于设置为Com互操作需要使用管理员权限,如果不使用管理员权限会提示

    错误 7 无法注册程序集“E:\test\WordItemDev\WpsItemInsert\bin\Debug\WpsItemInsert.dll”- 拒绝访问。请确保您正在以管理员身份运行应用程序。对注册表项“HKEYCLASSESROOT\WpsItemInsert.Init”的访问被拒绝。 WpsItemInsert

    于是使用管理员启动visual Studio,但是编译的时候却找不到wps上面的三个组件。

    未能添加对"kingsoft WPS 2.0 Object Library"的引用

    大概就是管理员下com组件没有注册,所以手工来给几个lib注册

    C:\WINDOWS\system32>regsvr32 D:\Program Files\WPS Office\9.1.0.4468\office6\ksaddndr.dll

    注册下面dll

    C:\WINDOWS\system32>regsvr32 D:\wps\9.1.0.4468\office6\ksoapiv8.dll
    提示模块xxx已经加载,但找不到入口点DllRegisterServerXXXXXXX

    也就是说我在普通模式下编译无法注册com组件,而在管理员模式无法调用wps的com组件。

    在wps论坛上问了这个问题,给的回答是

    使用管理员权限运行vs,但是引wps的com组件出现了问题,在普通运行的时候是没有问题的”这个貌似有点吻合。楼主用登录管理员安装WPS2013试试? ps:一般的软件在安装的时候都会提示该软件是仅适用我,还是所有人。如果是仅适用于我的话,就会将注册表信息保存在CurrentUser下,这样只有该用户登录才能看到该软件;如果是选择所有人的话,就会写到LocalMachine节点下

    确实是wps默认只给当前用户注册了com组件,所以在管理员权限下面会找不到wps的com组件

    解决方法

    是去administrator用户下重新安装一下wps就好了。在具有管理员权限的其他用户下使用管理员权限也不行,一定要到adminsitartor用户下才行。

    如果不能进管理员权限,在当前用户下使用管理员权限运行cmd执行

    net user administrator /active:yes

    注销后就能够看到adminsitrator用户了。

    转载于:https://my.oschina.net/xxiu/blog/198557

    更多相关内容
  • WPS插件开发demo_windows

    2018-10-24 14:58:14
    windows下的VS项目,压缩包里附带WPS2016专业版,解压后,可先阅读说明文档,然后进行操作,本代码提供了WPS插件实现的框架,只实现了简单的弹窗提示,其他功能只需在对应的接口内添加即可。
  • 开发wps插件,实现在工具栏里添加按钮,当用户单击按钮时弹出UI供用户设置密级;在wps 文档原有内容上添加水印功能,防止泄密
  • 金山WPS插件开发向导

    2020-07-28 15:21:38
    金山WPS插件开发向导 附实例源代码。实例源代码 金山 WPS 插件 向导 WPS Office是由金山软件股份有限公司自主研发的一款办公软件套装,可以实现办公软件最常用的文字、表格、演示,PDF阅读等多种功能
  • Word和WPS插件开发总结

    千次阅读 2020-01-17 13:34:15
    开发出的WORD和WPS插件的功能包括显示批注、隐藏批注、引入文件、附加对象、保存文档、退出应用。 1Word插件开发 1.1插件开发方法 1.1.1开发语言 开发语言的选择,可以选择C++和C#。 1.1.2Visualstudio开发说明...

    为了实现办公的自动化,需要实现文档的自动流转。开发出的WORD和WPS插件的功能包括显示批注、隐藏批注、引入文件、附加对象、保存文档、退出应用。

    1 Word插件开发

    1.1 插件开发方法

    1.1.1 开发语言

    开发语言的选择,可以选择C++和C#。

    1.1.2 Visual studio开发说明

    Visual Studio 2010提供了各个版本Office的插件开发,新建工程-按照的模板-Visual C#-Office-2010,运行程序时其会调用本地安装的Office;文件-选项-加载项-COM加载项,在此可以选择COM加载项。

    (1) Word开发引用的文件有Microsoft.Office.Interop.Word及Office

    (2) 使用的命名空间

    using Word = Microsoft.Office.Interop.Word;

    using Office = Microsoft.Office.Core;

    using Microsoft.Office.Tools.Word;

    1.1.3 Visual studio的Samples

    Visual Studio提供了本地WORD插件开发的示例,所在路径

    Visual Studio2010-Help-Samples-local Samples folder。

    1.2 三种访问word的方法

    1.2.0.1 官方API

    根据官方提供的API,可以实现对word的操作。

    1.2.0.2 调用对话框(属于API范畴)

    通过word提供的对话框方法调用Word.WdWordDialog.wdDialogInsertObject,打开“附加对象“对话框。

    this.Application.Dialogs[Word.WdWordDialog.wdDialogInsertObject].Execute();

    1.2.0.3 word控件

    获取其控件,然后执行Excute,打开“附加对象”对话框

    this.Application.ActiveDocument.CommandBars["Menu Bar"].Controls[4]).CommandBar.Controls[16].Execute();

     

    1.3 对WORD文档的操作

    1.3.1 打开文档

                Word.Application app = new Word.Application();             Word.Document dd = app.Documents.Open("C:\\hi12.docx");

    1.3.2 word2010控件的操作方法

    微软在word使用了Ribbon Interface,通过该接口可以获取所有的菜单和工具栏的命令。具体见:

    http://office.microsoft.com/en-us/outlook-help/learn-where-menu-and-toolbar-commands-are-in-office-2010-and-related-products-HA101794130.aspx#_Toc268688374

    1.3.2.1 两层节点访问方式

    word一般是通过CommandBar/CommandBars和Control/Controls访问控件。只有两层的访问方式:第一层,直接访问CommandBar/CommandBars,通过CommandBar/CommandBars访问其下的Control/Controls。

    如:

    获取Show Markup命令条下几个Controls:

    Globals.IRHelperBar.Application.ActiveDocument.CommandBars["Show Markup"].Controls.Count;

    执行Show Markup命令条下的第7个Controls的实体的方法:

    Globals.IRHelperBar.Application.ActiveDocument.CommandBars["Show Markup"].Controls[7].Excute();

    1.3.2.2 多层节点的访问方式

    1)子节点访问方式

    如果Control下面还有子节点,查看其CommandBar下的Name;通过此名获访问其下的Controls。类似多叉树的访问方式。

    Globals.IRHelperBar.Application.ActiveDocument.CommandBars["Reviewers"].Controls[1];

     

     

    2)三层节点的访问方式

    正常只是提供两级的访问结构CommandBars-Controls;如果有第三级并且需要访问,那么把Control提升为Command,创新构造两级结构Command-Control,从而实现第三层的访问。 

    This.Application.ActiveDocument.CommandBars["Menu Bar"].Controls[4]).CommandBar.Controls[16].Execute();

    1.3.3 Word的部分功能

    1.3.3.1 显示/隐藏标注

    1)隐藏标注

    调用API方式

    wdApp.ActiveWindow.View.ShowRevisionsAndComments = False

    控件方式

    ((dynamic)Globals.ThisAddIn.Application.ActiveDocument.CommandBars["Reviewing"].Controls[1]).Control.ListIndex = 2; 

    2)显示标注

    调用API方式

    wdApp.ActiveWindow.View.ShowRevisionsAndComments = True

    控件方式

    ((dynamic)Globals.ThisAddIn.Application.ActiveDocument.CommandBars["Reviewing"].Controls[1]).Control.ListIndex = 1;

    3)切换显示/隐藏标注

    Globals.ThisAddIn.Application.Application.ActiveDocument.CommandBars["Show Markup"].Controls[3].Execute();

    1.3.3.2 隐藏/显示审阅窗格

    执行下面的语句,可以开始打开/关闭审阅窗格

    doc.CommandBars["Reviewing"].Controls["Reviewing Pane"].Execute();

    1.3.3.3 引入文件

    ((dynamic)Globals.ThisAddIn.Application.ActiveDocument.CommandBars["Menu Bar"].Controls[4]).CommandBar.Controls[16].Execute();

    1.3.3.4 附加对象

    ((dynamic)Globals.ThisAddIn.Application.ActiveDocument.CommandBars["Menu Bar"].Controls[4]).CommandBar.Controls[17].Execute();

    1.3.3.5 保存文件

    Globals.ThisAddIn.Application.ActiveDocument.CommandBars["Standard"].Controls[3].Execute();

    1.3.3.6 退出应用

    ((dynamic)Globals.ThisAddIn.Application.ActiveDocument.CommandBars["Menu Bar"].Controls[1]).CommandBar.Controls[21].Execute();

    1.4 遍历Word2010的一级和二级控件

    //Create Word Application

                Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();

                //Create a new txt file to record controls' list

                StreamWriter sw = System.IO.File.CreateText(@"C:\Word Command Bar Control List.txt");

                //loop through wordApp.CommandBars to get all CommandBars

                foreach (Office.CommandBar cb in wordApp.CommandBars)

                {

                    sw.WriteLine(cb.Name);

                    //loop through each CommandBar's Controls collection to get all controls

                    foreach (Office.CommandBarControl cbc in cb.Controls)

                    {

                        sw.WriteLine("\t" + cbc.Caption);

                    }

                }

    1.5 Word文档的窗体事件

    http://support.microsoft.com/kb/302817

    最小化word窗口时,关闭

            Form1 fm;

            private void ThisAddIn_Startup(object sender, System.EventArgs e)

            {

                fm = new Form1();

                fm.Show();

               // fm.TopMost=false;

               // this.Application.ActiveDocument.Windows.Count;

                object aa = this.Application.ActiveDocument.CommandBars["Show Markup"].Controls[3].OnAction;

                this.Application.WindowSize+=new Word.ApplicationEvents4_WindowSizeEventHandler(Application_WindowSize);    

            }

            private void Application_WindowSize(Word.Document Doc, Word.Window Wn)

            {

                if (this.Application.WindowState == Word.WdWindowState.wdWindowStateMinimize)

                {

                    fm.Hide();

                }

                else

                {

                    fm.Show();

                }

            }

    2 WPS插件开发

    WPS插件开发可以在WPS二次开发论坛http://bbs.wps.cn/forum-wpsercikaifa-1.html找到开发的资料。

    开发语言

    WPS可以使用C++、VB6/VAB、.net三种语言

    本人实现了C++、VB6/VAB两种语言的开发。

    2.1 三种访问WPS的方式

     

    2.2 使用C++向导实现插件开发(V9.1.0.4468)

    目前该种方法只在版本号为V9.1.0.4468中调试成功。

    下载该向导:

    http://bbs.wps.cn/forum.php?mod=viewthread&tid=22410767&extra=page%3D1%26filter%3Dtypeid%26typeid%3D151%26typeid%3D151

    然后解压缩该文档,按照setup_vs2008.js,显示安装成功及代表插件开发向导按照成功。

    打开vs2008-新建工程,即可以看到WPS Office插件开发模板。

    在OnConnection函数中添加插件功能。

    2.2.1 关键代码

    功能实现部分,test.h文件。

    #pragma once

    class __declspec(uuid("{D31D0AB3-B6A5-4FA7-A0C0-179DB9FBFF72}")) test;

    _declspec(selectany) _ATL_FUNC_INFO OnClickButtonInfo =

    {

    CC_STDCALL,

    VT_EMPTY,

    2,

    { VT_DISPATCH, VT_BYREF | VT_BOOL }

    };

     

    using namespace AddInDesignerObjects;

     

    class test : 

    public CComObjectRootEx<CComSingleThreadModel>,

    public CComCoClass<test, &__uuidof(test)>,

    public IDispatchImpl<_IDTExtensibility2, &IID__IDTExtensibility2, &LIBID_AddInDesignerObjects>,

    public IDispEventSimpleImpl<1, test, &DIID__CommandBarButtonEvents>,

    public IDispEventSimpleImpl<2, test, &DIID__CommandBarButtonEvents>,

    public IDispEventSimpleImpl<3, test, &DIID__CommandBarButtonEvents>,

    public IDispEventSimpleImpl<4, test, &DIID__CommandBarButtonEvents>,

    public IDispEventSimpleImpl<5, test, &DIID__CommandBarButtonEvents>,

    public IDispEventSimpleImpl<6, test, &DIID__CommandBarButtonEvents>,

    public IDispEventSimpleImpl<7, test, &DIID__CommandBarButtonEvents>

    {

     

    private:

    WPS::_ApplicationPtr m_spWPSApp;

    _CommandBarButtonPtr m_spButton1;

    _CommandBarButtonPtr m_spButton2;

    _CommandBarButtonPtr m_spButton3;

    _CommandBarButtonPtr m_spButton4;

    _CommandBarButtonPtr m_spButton5;

    _CommandBarButtonPtr m_spButton6;

    _CommandBarButtonPtr m_spButton7;

     

     

    public:

    DECLARE_REGISTRY_RESOURCEID(IDR_WPSCOMADDONS)

    DECLARE_PROTECT_FINAL_CONSTRUCT()

     

    BEGIN_COM_MAP(test)

    COM_INTERFACE_ENTRY(IDispatch)

    COM_INTERFACE_ENTRY(_IDTExtensibility2)

    END_COM_MAP()

     

     BEGIN_SINK_MAP(test)

    SINK_ENTRY_INFO(1, DIID__CommandBarButtonEvents, 0x01, OnClickButton1, &OnClickButtonInfo)

    SINK_ENTRY_INFO(2, DIID__CommandBarButtonEvents, 0x01, OnClickButton2, &OnClickButtonInfo)

    SINK_ENTRY_INFO(3, DIID__CommandBarButtonEvents, 0x01, OnClickButton3, &OnClickButtonInfo)

    SINK_ENTRY_INFO(4, DIID__CommandBarButtonEvents, 0x01, OnClickButton4, &OnClickButtonInfo)

    SINK_ENTRY_INFO(5, DIID__CommandBarButtonEvents, 0x01, OnClickButton5, &OnClickButtonInfo)

    SINK_ENTRY_INFO(6, DIID__CommandBarButtonEvents, 0x01, OnClickButton6, &OnClickButtonInfo)

    SINK_ENTRY_INFO(7, DIID__CommandBarButtonEvents, 0x01, OnClickButton7, &OnClickButtonInfo)

    //SINK_ENTRY_INFO(3, __uuidof(ET::_ApplicationEvents),0x113005, SheetActivate, &SheetActivateInfo)

    END_SINK_MAP()

     

    typedef IDispEventSimpleImpl<1, test, &DIID__CommandBarButtonEvents> CommandBarButtonEvents1;

    typedef IDispEventSimpleImpl<2, test, &DIID__CommandBarButtonEvents> CommandBarButtonEvents2;

    typedef IDispEventSimpleImpl<3, test, &DIID__CommandBarButtonEvents> CommandBarButtonEvents3;

    typedef IDispEventSimpleImpl<4, test, &DIID__CommandBarButtonEvents> CommandBarButtonEvents4;

    typedef IDispEventSimpleImpl<5, test, &DIID__CommandBarButtonEvents> CommandBarButtonEvents5;

    typedef IDispEventSimpleImpl<6, test, &DIID__CommandBarButtonEvents> CommandBarButtonEvents6;

    typedef IDispEventSimpleImpl<7, test, &DIID__CommandBarButtonEvents> CommandBarButtonEvents7;

     

    test()

    {

    }

     

    ~test()

    {

    }

     

    public:

    STDMETHOD(OnConnection)(IDispatch * Application, 

    ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)

    {

    try

    {

    m_spWPSApp = Application;

    _CommandBarsPtr spCommandBars = m_spWPSApp->CommandBars;

    CommandBarPtr spCommandBar = spCommandBars->Add("MOKA工具条",1 ,"",TRUE);

    CommandBarControlsPtr ETCtrls =spCommandBar ->Controls;

     

     

    KSO::CommandBarControlPtr  popupButton1=ETCtrls->Add(1,"","",TRUE);

    popupButton1->Caption = _bstr_t(L"显示标注");

     

    KSO::CommandBarControlPtr  popupButton2=ETCtrls->Add(1,"","",TRUE);

    popupButton2->Caption = _bstr_t(L"隐藏标注");

     

    KSO::CommandBarControlPtr  popupButton3=ETCtrls->Add(1,"","",TRUE);

    popupButton3->Caption = _bstr_t(L"打开文件");

     

    KSO::CommandBarControlPtr  popupButton4=ETCtrls->Add(1,"","",TRUE);

    popupButton4->Caption = _bstr_t(L"附件对象");

     

    KSO::CommandBarControlPtr  popupButton5=ETCtrls->Add(1,"","",TRUE);

    popupButton5->Caption = _bstr_t(L"保存文件");

     

    KSO::CommandBarControlPtr  popupButton6=ETCtrls->Add(1,"","",TRUE);

    popupButton6->Caption = _bstr_t(L"退出应用");

     

    //KSO::CommandBarControlPtr  popupButton7=ETCtrls->Add(1,"","",TRUE);

    //popupButton7->Caption = _bstr_t(L"文档模板");

     

     

     

    CommandBarButtonEvents1::DispEventAdvise(popupButton1);

    CommandBarButtonEvents2::DispEventAdvise(popupButton2);

    CommandBarButtonEvents3::DispEventAdvise(popupButton3);

    CommandBarButtonEvents4::DispEventAdvise(popupButton4);

    CommandBarButtonEvents5::DispEventAdvise(popupButton5);

    CommandBarButtonEvents6::DispEventAdvise(popupButton6);

    //CommandBarButtonEvents7::DispEventAdvise(popupButton7);

    }

    catch(const _com_error&)

    {

    }

    return S_OK;

    }

     

    STDMETHOD(OnDisconnection)(ext_DisconnectMode RemoveMode, SAFEARRAY * * custom)

    {

    return S_OK;

    }

    STDMETHOD(OnAddInsUpdate)(SAFEARRAY * * custom)

    {

    return S_OK;

    }

    STDMETHOD(OnStartupComplete)(SAFEARRAY * * custom)

    {

    return S_OK;

    }

    STDMETHOD(OnBeginShutdown)(SAFEARRAY * * custom)

    {

    return S_OK;

    }

     //隐藏标注

    void __stdcall OnClickButton1(

    IDispatch* pCtrl,

    VARIANT_BOOL* pbCancelDefault)

        {

           

          try

       {

       m_spWPSApp->ActiveWindow->View->ShowRevisionsAndComments = true;

     

       }

       catch (const _com_error& )

       {

       }

     return;

       }

       //

        void __stdcall OnClickButton2(

    IDispatch* pCtrl,

    VARIANT_BOOL* pbCancelDefault)

        {

      try

      {

      m_spWPSApp->ActiveWindow->View->ShowRevisionsAndComments = false;

      }

      catch (const _com_error& )

      {

      }

     return;

            }

     

    //打开文件

        void __stdcall OnClickButton3(

    IDispatch* pCtrl,

    VARIANT_BOOL* pbCancelDefault)

        {

       try

      {

     

       //m_spWPSApp->Selection->InsertFile("D:/win.txt",&vtMissing,&vtMissing,&vtMissing,&vtMissing);

    //  引入文件

     // WPS::WpsDialog aa = WPS::WpsDialog::wpsDialogInsertFile;

      WPS::WpsDialog aa = WPS::WpsDialog::wpsDialogOpenFile;

      m_spWPSApp->Dialogs->Item(aa)->Show();

     

     

      }

      catch (const _com_error& )

      {

      }

     return;

       }

     

    //附加对象

       void __stdcall OnClickButton4(

    IDispatch* pCtrl,

    VARIANT_BOOL* pbCancelDefault)

        {

       try

       {

      // WPS::ShapeNodePtr pp = m_spWPSApp->ActiveDocument->Shapes->AddShape(ksoShapeActionButtonMovie, 100, 100, 200, 200,&vtMissing);

       //m_spWPSApp->ActiveDocument->InlineShapes->AddOLEControl();

       WPS::WpsDialog aa = WPS::WpsDialog::wpsDialogInsertOLEObject;

       m_spWPSApp->Dialogs->Item(aa)->Execute();

     

     

       }

     catch (const _com_error& )

     {

     }

    return;

          }

     

    //保存所有的文档

         void __stdcall OnClickButton5(

      IDispatch* pCtrl,

      VARIANT_BOOL* pbCancelDefault)

         {

      try

      {

     // m_spWPSApp->ActiveDocument->Save();

      m_spWPSApp->CommandBars->Item[L"TabMenu Popup Menu"]->Controls->Item[L"保存所有文档(&E)"]->Execute();

      }

      catch (const _com_error& )

      {

       }

    return;

        }

     

    //退出所有的文档并且一一询问是否需要保存修改过的文档,最后关闭应用

         void __stdcall OnClickButton6(

      IDispatch* pCtrl,

      VARIANT_BOOL* pbCancelDefault)

         {

      try

      {

     // m_spWPSApp->Documents->Close();

     

      _variant_t tt=WPS::wpsPromptToSaveChanges;

      m_spWPSApp->Quit(&tt,&vtMissing,&vtMissing); 

     

      }

      catch (const _com_error& )

      {

       }

    return;

        }

    };

    程序运行后会直接调用本地安装WPS2013(V9.1.0.4468),该插件在开发工具-COM加载项中显示,并可以勾选决定是否加载该插件。

    2.2.2 C++获取WPS的一级和二级控件

         ofstream outfile("d://b.txt");  

       if(!outfile){  

                cout << "Unable to open otfile";  

                exit(1); // terminate with error  

                } 

     

    _bstr_t bstr = m_spWPSApp->CommandBars->Count;

     CString strSql = (LPCSTR)bstr;

     int b=_ttoi(strSql);

     int a=0;  

     for(int a=1;a<=b;a++)

     {

     string strSql = (LPCSTR)m_spWPSApp->CommandBars->Item[a]->Name;

                     outfile<<a <<" "<<strSql<<endl; 

     

     

     _bstr_t bstr2 = m_spWPSApp->CommandBars->Item[a]->Controls->Count  ;

         CString strSql2 = (LPCSTR)bstr2;

         int m=_ttoi(strSql2);

     for(int n=1;n<=m;n++)

     {

     string strSql = (LPCSTR)m_spWPSApp->CommandBars->Item[a]->Controls->Item[n]->Caption;

                       outfile<<" "<<a <<"."<<n<<" "<<strSql<<endl; 

     }

     

     }

     outfile.close(); 

    2.3 VB6制作COM加载项

    VB6与VAB的区别

    VB是编程工具,与VS2008相似;VAB作为程序的自动化脚本而存在,必须依赖于宿主程序。

    他们的主要区别是:

      1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化 

      2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序.

      3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的父应用程序,例如EXCEL. 

    2.3.1 VB6制作COM加载项的步骤

    1.新建工程,选择ActiveX Dll。 2.工程、引用、选择Kingsoft Add-In Designer、Kingsoft Office 1.0 Object Library、Kingsoft WPS 2.0 object Library。 3.将工程名原来的“工程1”改为“kgsPro”,类名称的“Class1”改为“AddCommand” (这里的修改的名称根据实际情况而定义,但在后面的注册时会用到这两个名字) 4.写入如下的代码:

    代码如下两节所示

    5.单击文件、生成***.dll,保存到C盘下,文件名为kgsPro.dll。 6.Dll生成完成,下面就是注册的步骤了。 7.新建一个文本文档,保存为AddDemo.reg,写入如下的内容 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Kingsoft\Office\WPS\Addins\kgsPro.AddCommand] "FriendlyName"="WPS加载项Demo" "Description"="Konguisheng的Demo系列之加载项" "LoadBehavior"=dword:00000003 "CommandLineSafe"=dword:00000001 8.双击AddDemo.reg,将此导入到注册表中。 9.单击Windows的“运行”,输入regsvr32 C:\kgsPro.dll完成 10.如果要删除这个加载项 A.新建一个文本文档,保存为DeleteDemo.reg,写入如下的内容 Windows Registry Editor Version 5.00 [-HKEY_CURRENT_USER\Software\Kingsoft\Office\WPS\Addins\kgsPro.AddCommand] B.单击Windows的“运行”,regsvr32 /u C:\kgsPro.dll (此步不是必须)

    2.3.2 WPS2009生产COM加载项的代码

    Option Explicit

     Implements IDTExtensibility2

     Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)

     End Sub

     Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant) 

    End Sub

     Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)

     End Sub

     Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)

     End Sub

     Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)

     End Sub

    2.3.3 WPS2013(9.1.0.4468)生产COM加载项

    Option Explicit

    Implements IDTExtensibility2

    Private WithEvents btnNew1 As CommandBarButton

    Private WithEvents btnNew2 As CommandBarButton

    Private WithEvents btnNew3 As CommandBarButton

    Private WithEvents btnNew4 As CommandBarButton

    Private WithEvents btnNew5 As CommandBarButton

    Private WithEvents btnNew6 As CommandBarButton

    Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)

    Dim comb As CommandBar

    Set comb = Application.CommandBars.Add("我的工具栏"

    Set btnNew1 = comb.Controls.Add

    btnNew1.Caption = "退出程序"

    btnNew1.SetPictureByPath ("D:/wps开发文档/VB-9.1.0.4468/quit.jpg")

    Set btnNew2 = comb.Controls.Add

    btnNew2.Caption = "保存文档"

    Set btnNew3 = comb.Controls.Add

    btnNew3.Caption = "引入文件"

    Set btnNew4 = comb.Controls.Add

    btnNew4.Caption = "附加对象"

    Set btnNew5 = comb.Controls.Add

    btnNew5.Caption = "显示标注"

    Set btnNew6 = comb.Controls.Add

    btnNew6.Caption = "隐藏标注"

    End Sub

    Private Sub btnNew1_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

    Application.Quit SaveChanges:=wpsPromptToSaveChanges

    End Sub

    Private Sub btnNew2_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

    Application.Documents.Save

    End Sub

    Private Sub btnNew3_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

    Dialogs(wpsDialogInsertFile).Show

    End Sub

    Private Sub btnNew4_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

    Dialogs(wpsDialogInsertOLEObject).Execute

    End Sub

    Private Sub btnNew5_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

    Application.ActiveWindow.View.ShowRevisionsAndComments = True

    End Sub

    Private Sub btnNew6_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

    Application.ActiveWindow.View.ShowRevisionsAndComments = False

    End Sub

    Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)

    End Sub

    Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)

    End Sub

    Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)

    End Sub

    Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)

    End Sub

    2.3.4 VB6的一些操作说明

    下载VB6.0精装版。

    文件-输出XX.dll文件

    工具-引用,选择应用的库

    视图-对象浏览器,查看库提供的具体方法及属性。

    F5执行程序

    F8单步执行程序

    将光标放置在某一个函数内按F5,只执行该函数。

    2.4 VAB开发环境

    首先安装好WPS,此时开发工具中的VB编辑器是灰色的(假定此版WPS没有带VAB开发功能)

    安装对应版本的VAB,安装好后,VB编辑器亮色,表示可以使用。

    新建VAB工程

    开发工具-VB编辑器-F5,若此文档未定义宏,弹出对话框,要求输入宏的名称。

    Hello World程序示例:

    Sub Test

    Dim st As String

     st = "Hello Word!"

     MsgBox st

    End Test

    2.4.1 WPS2009代码示例–VAB示例

    Sub test()

    '声明一个工具栏对象

    Dim comb As CommandBar

    '添加一个新的工具栏并命名为“我的工具栏”

    Set comb = Application.CommandBars.Add("我的工具栏")

    '添加一个按钮 名字为“文字” 指定单击时调用宏“InsertText”

    With comb.Controls.Add(KsoControlType.ksoControlButton)

    .Caption = "文字"

    .OnAction = "InsertText"

    End With

    '添加一个按钮 名字为“图片” 指定单击时调用宏“InsertImg”

    With comb.Controls.Add(KsoControlType.ksoControlButton)

    .Caption = "图片"

    .OnAction = "InsertImg"

    End With

    '添加一个按钮 名字为“表格” 指定单击时调用宏“InsertTable”

    With comb.Controls.Add(KsoControlType.ksoControlButton)

    .Caption = "表格"

    .OnAction = "InsertTable"

    End With

     End Sub

    Sub InsertText()

    '写入文本

    Selection.TypeText "Kingsoft Office 2009"

    '居中对齐

    Selection.ParagraphFormat.Alignment = wpsAlignParagraphCenter

    '新段落

    Selection.TypeParagraph

    End Sub

    Sub InsertTable()

    '插入表格

    Dim mytable As Table

    '指定表格的行列数

    Set mytable = Selection.Tables.Add(Selection.Range, 3, 3)

    End Sub

    Sub InsertImg()

    '插入图片

    Dim myimg As InlineShape

    '图片路径为与文档同一目录下名字为"logo.png"

    Set myimg = Selection.InlineShapes.AddPicture(ThisDocument.Path & "logo.png")

    End Sub

    2.4.2 WPS2013代码示例-9.1.0.4468 –VAB示例

    Sub test()

    '声明一个工具栏对象

    Dim comb As CommandBar

    '添加一个新的工具栏并命名为"我的工具栏"

    Set comb = Application.CommandBars.Add("我的工具栏")

    With comb.Controls.Add(ControlButton)

    .Caption = "退出"

    .OnAction = "Quit"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "保存"

    .OnAction = "Save"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "打开文件"

    .OnAction = "InsertFile"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "附加对象"

    .OnAction = "InsertObject"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "显示标注"

    .OnAction = "ShowComments"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "隐藏标注"

    .OnAction = "HideComments"

    End With

     

    End Sub

    Sub Quit()

    Application.Quit SaveChanges:=wpsPromptToSaveChanges

    End Sub

     

    Sub Save()

    Application.Documents.Save

    End Sub

    Sub InsertFile()

    'Selection.InsertFile FileName:="d:\win.txt", Link:=True

    Dialogs(wpsDialogOpenFile).Execute

    End Sub

    Sub InsertObject()

    'Application.ActiveDocument.InlineShapes.AddOLEObject ClassType:="Excel.Sheet", FileName:="ww", LinkToFile:=True, DisplayAsIcon:=True, IconFileName, IconIndex, IconLabel, Range

    'Application.ActiveDocument.InlineShapes.AddOLEObject "Excel.Sheet", "ww", True, True

    'Application.ActiveDocument.InlineShapes.AddOLEObject "Excel.Sheet"

    'Application.ActiveDocument.InlineShapes.AddOLEObject "Equation.3", , True

    'Application.ActiveDocument.InlineShapes.AddOLEObject , "d:\win.txt", True, True, , 2

     With Dialogs(wpsDialogInsertOLEObject)

     .Execute

             

     End With

     

    End Sub

    Sub ShowComments()

    ThisDocument.ActiveWindow.View.ShowRevisionsAndComments = True

    End Sub

    Sub HideComments()

    ThisDocument.ActiveWindow.View.ShowRevisionsAndComments = False

    End Sub

    2.4.3 WPS2013代码示例-9.1.0.4842 –VAB示例

    Sub test()

     '声明一个工具栏对象

    Dim comb As CommandBar

    '添加一个新的工具栏并命名为“我的工具栏”

    Set comb = Application.CommandBars.Add("我的工具栏")

    '添加一个按钮 名字为“文字” 指定单击时调用宏“InsertText”

     With comb.Controls.Add(ControlButton)

    .Caption = "退出"

    .OnAction = "Quit"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "保存"

    .OnAction = "Save"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "引入"

    .OnAction = "InsertFile"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "附加"

    .OnAction = "InserObject"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "显痕"

    .OnAction = "ShowComments"

    End With

     

    With comb.Controls.Add(ControlButton)

    .Caption = "隐痕"

    .OnAction = "HideComments"

    End With

     

    End Sub

    Sub Quit()

    Application.Quit SaveChanges:=wpsPromptToSaveChanges

    End Sub

     

    Sub Save()

    Application.Documents.Save

    End Sub

    Sub InsertFile()

    Selection.InsertFile FileName:="d:\win.txt", Link:=True

    End Sub

    Sub InsertObject()

    'Application.ActiveDocument.InlineShapes.AddOLEObject ClassType:="Excel.Sheet", FileName:="ww", LinkToFile:=True, DisplayAsIcon:=True, IconFileName, IconIndex, IconLabel, Range

    'Application.ActiveDocument.InlineShapes.AddOLEObject "Excel.Sheet", "ww", True, True

    'Application.ActiveDocument.InlineShapes.AddOLEObject "Excel.Sheet"

    'Application.ActiveDocument.InlineShapes.AddOLEObject "Equation.3", , True

    'Application.ActiveDocument.InlineShapes.AddOLEObject , "d:\win.txt", True, True, , 2

     With Dialogs(wdDialogHelpAbout)

            .Show

        End With

     

    End Sub

    Sub ShowComments()

    ThisDocument.ActiveWindow.View.ShowRevisionsAndComments = True

    End Sub

    Sub HideComments()

    ThisDocument.ActiveWindow.View.ShowRevisionsAndComments = False

    End Sub

     

    3 B/S调用本地word应用

    两种方式:ActiveX、注册表的方式。

    3.1 ActiveX方式

    ActiveX方式只有IE浏览器提供,但是chrome、Opera、firefox都不支持该控件,此种方式逐渐被抛弃。

    示例:打开服务器的doc文件

    <html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>test</title>

    </head>

    <body>

    <button οnclick="openDoc()">openDoc</button>

    <script type="text/javascript">

    function openDoc () {

    // body...

    var openDocObj; 

    openDocObj = new ActiveXObject("SharePoint.OpenDocuments.2"); // 为了兼容Office XP,可以创建“SharePoint.OpenDocuments.1”

    openDocObj.ViewDocument("http://localhost//葫芦岛三日游行程.doc"); 

    }

    </script>

    </body>

    </html> 

    “IE已限制此网页运行脚本或ActiveX控件”,允许运行该AtiveX控件,确定,即可以下载服务器的doc文档,在本地运行。但是chrome、Opera、firefox都不支持该控件。

    3.2 注册表

    b/s程序不允许调用本地的exe,如果是这样的话,互联网没有安全可言了

    3.2.1 自己编写的程序

    可以通过注册一个自己的协议的办法,如

    Windows Registry Editor Version 5.00 

    [HKEY_CLASSES_ROOT\form] 

    "URL Protocol"="D:\\form.exe"  

    @="form"  

    [HKEY_CLASSES_ROOT\form\DefaultIcon] 

    @="D:\\form.exe,1"  

    [HKEY_CLASSES_ROOT\form\shell] 

    [HKEY_CLASSES_ROOT\form\shell\open] 

    [HKEY_CLASSES_ROOT\form\shell\open\command]  

    @="\"D:\\form.exe\" \"%1\""

    注册表工具的版本信息

    HKEY_CLASSWES_ROOT\添加form树,树的名称对应自定义的URLProtocol的名称,web调用中需要用到这个名称

    协议的名称,任意字符,后面不会用到

    可应用程序的路径,只能是exe的程序

    form添加一个分支,照抄

    应用程序的路径,1照抄

    form添加一个分支,照抄

    form添加一个分支,照抄

    应用程序路径,%1表示参数

    注:

    1) 路径使用双杠“\\”

    2) 如果字符串中有双引号(”),那么需要加转义字符“\”

    3) 将文件名称改为form.reg,双击文件执行,将这些项写入到注册表

     

    检验是否注册成功

    开始-运行 输入form:://test/,如果可以运行该程序,表示注册成功了;或者在浏览器的地址栏直接输入:form:://test/,可以运行则表示注册成功。

    3.2.2 调用本地程序

    3.2.2.1 启动本地WPS

    Windows Registry Editor Version 5.00 

    [HKEY_CLASSES_ROOT\wps] 

    @="wps"  

    "URL Protocol"="C:\\Users\\Administrator\\AppData\\Local\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wps.exe"    

    [HKEY_CLASSES_ROOT\wps\DefaultIcon] 

    @="C:\\Users\\Administrator\\AppData\\Local\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wps.exe,1"  

    [HKEY_CLASSES_ROOT\wps\shell] 

    @="open"

    [HKEY_CLASSES_ROOT\wps\shell\open] 

    @="open"

    [HKEY_CLASSES_ROOT\wps\shell\open\command]  

    @="\"C:\\Users\\Administrator\\AppData\\Local\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wps.exe\" \"%1\""

    1) 将文件名改为wps.reg,双击执行该文件,注册上述各项。

    2) 在程序-开始/运行/各种浏览器中输入wps:://test/(wps::/test/、wps:/test/、wps: /test/、wps: )即可以启动本地安装的WPS软件。

    3.2.2.2 启动本地Word

    Windows Registry Editor Version 5.00 

    [HKEY_CLASSES_ROOT\word] 

    @="word"  

    "URL Protocol"="C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE"    

    [HKEY_CLASSES_ROOT\word\DefaultIcon] 

    @="C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE,1"  

    [HKEY_CLASSES_ROOT\word\shell] 

    @="open"

    [HKEY_CLASSES_ROOT\word\shell\open] 

    @="open"

    [HKEY_CLASSES_ROOT\word\shell\open\command]  

    @="\"C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE\" \"%1\""

    1) 将文件名改为wps.reg,双击执行该文件,注册上述各项。

    2) 在程序-开始/运行/各种浏览器中输入word:://test /(word::/test/、word:/test/、word: /test/、word: )即可以启动本地安装的word软件。

    3) 在程序-开始/运行/各种浏览器中输入word:://id: /(word::/ id: /、word:/ id: /、word:  / id: /、word: /id:  )即可以启动本地安装的word软件。

     

    3.2.2.3 各版本Word的注册表查询

    http://support.microsoft.com/kb/822005/zh-cn

    Word 2013 HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Word

    Word 2010

    HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word

    Word 2007

    HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word

    Word 2003

    HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word

    Word 2002

    HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word

    Word 2000

    HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word

    展开全文
  • WPS插件开发流程(2)

    千次阅读 2018-05-09 07:43:06
    上一篇文章WPS插件开发流程(1)中,我们详细讲了如何在Visual Studio中如何创建插件、在WPS中显示插件的方法。今天我们完成剩下的部分,讲解如何导出PIA、DLL强签名、打包安装文件夹的方法。需要注意的是,开发WPS...


    上一篇文章WPS插件开发流程(1)中,我们详细讲了如何在Visual Studio中如何创建插件、在WPS中显示插件的方法。今天我们完成剩下的部分,讲解如何导出PIA、DLL强签名、打包安装文件夹的方法。需要注意的是,开发WPS插件方法不止一种,我分享的开发流程仅供大家参考


    (八)生成WPS演示所需的PIA

    我参考的原文章:http://www.cnblogs.com/wangqiang3311/p/7206406.html

    1. 打开WPS的安装文件夹,找到ksoapi.dll和wppapi.dll,复制到D盘下自己创建的PIA文件夹中,方便后续操作

    提示:若需要生成WPS文字或WPS表格的PIA,对应的DLL分别是wpsapi.dl或etapi.dlll

    2. 在开始菜单中,打开”VS 2017的开发人员命令提示符”

    3. 输入cd “D:\PIA”,进入PIA文件夹中

    4. 输入TlbImp ksoapi.dll (注意是tlbimp)后回车,会在PIA文件夹中生成Office.dll。输入TlbImp wppapi.dll 后回车,会在PIA文件夹中生成PowerPoint.dll

    5. 这样我们就得到了Office.dll和PowerPoint.dll两个文件


    (九)强签名

    如果要将这两个Dll添加到GAC,还需要进行强签名(若用户是WPS专业版则不需要,为了兼容性,推荐进行强签名)。另外,如果项目中引用了第三方未签名的dll,则必须进行强签名才能引用

    1.  输入sn -k test.pfx后回车,生成随机密钥对

    提示:此处的test.pfx可以是任意名称,密钥文件扩展名也可以是.snk

    2. 输入ildasm Office.dll /out:Office.il后回车,采用反汇编工具ildasm生成中间语言。

    3. 输入ilasm /dll /res:Office.res /key:test.pfx Office.il /out:Office.dll后回车,采用汇编工具ilasm(注意不要看成ildasm重新生成dll

    4. PowerPoint.dll的强签名操作按照步骤2和3类推,输入以下命令

    ildasm PowerPoint.dll /out:PowerPoint.il

    ilasm /dll /res:PowerPoint.res /key:test.pfx PowerPoint.il/out:PowerPoint.dll

    5. 重新生成dll后提示:Operation completed successfully,说明强签名成功

    提示:经过强签名后的dll会覆盖原来未签名的dll

    6. 强签名后的Office.dll和PowerPoint.dll


    (十)部署

    1. 将项目调试由Debug改为Release

    提示:第一次切换Debug为Release,需要在项目属性中重新设置:生成(为COM互操作注册)、调试(启动外部程序)

    2. 点启动按钮后关闭WPP,目的是为了让VS生成Release版的项目dll

    3. 在项目上右键,点”在文件资源管理器中打开文件夹”

    4. 双击bin文件夹,双击打开Release文件夹,将之前强签名后的dll复制过来

    5. 将步骤(六)中创建的安装和卸载注册表文件也复制过来

    6. 将NETFX 4.0 Tools文件夹复制过来(该文件夹在项目源码的Release文件夹中有)

    7. 在记事本中输入已下代码,另存为”安装.bat”批处理文件

    @echo off
    
    @setbaseDir="%cd%"
    
    Echo.
    
    Echo 【1】导入注册表
    
    regedit/s %baseDir%\install.reg
    
    Echo.
    
    Echo 【2】注册类型
    
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm%baseDir%\WPP_test.dll /tlb:%baseDir%\WPP_test.tlb
    
    Echo.
    
    Echo 【3】添加程序集到GAC
    
    @SETGACUTIL="%baseDir%\NETFX 4.0 Tools\gacutil.exe"
    
    %GACUTIL%-i %baseDir%\WPP_test.dll
    
    %GACUTIL%-i %baseDir%\PowerPoint.dll
    
    %GACUTIL%-i %baseDir%\Office.dll
    
    pause

    8. 在记事本中输入以下代码,另存为”卸载.bat”批处理文件

    @echo off
    
    @setbaseDir="%cd%"
    
    Echo.
    
    Echo 【1】从缓存中移除程序集
    
    @SETGACUTIL="%baseDir%\NETFX 4.0 Tools\gacutil.exe"
    
    rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\WPP_test
    
    rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\PowerPoint
    
    rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Office
    
    Echo.
    
    Echo 【2】注销类型
    
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm/u %baseDir%\WPP_test.dll /tlb:%baseDir%\WPP_test.tlb
    
    Echo.
    
    Echo 【3】清除注册表
    
    regedit/s %baseDir%\uninstall.reg
    
    pause

    说明:

    (1)%cd%是bat文件当前文件夹路径;RegAsm是程序集注册工具,需要用户先安装Microsoft .Net Framework 4.0;gacutil.exe是全局程序集缓存工具,用户电脑一般没有,所以需要我们将NETFX 4.0 Tools文件夹附带在安装包里

    (2)上面的”安装.bat”和”卸载.bat”中均默认注册或移出PowerPoint.dll和Office.dll,如果用户安装了同样也是本文章方法创建的插件,可能会影响其他插件使用。为保险起见,我们可以在”卸载.bat”文件中不要移除C:\Windows\Microsoft.NET\assembly\GAC_MSIL文件夹下的PowerPoint和Office文件夹。即在上方”卸载.bat”代码中去掉下面两句:

    rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\PowerPoint

    rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Office

    9. 将Release文件夹整体拷贝出来,打包发给用户。用户安装时,以管理员身份运行”安装.bat”即可

    10.  用户安装失败常见原因

    (1) 用户未安装Microsoft .Net Framework 4.0

    (2) Win7以上系统,用户未以管理员身份运行安装.bat

    (3) 安装文件夹所在路径中有空格,需去掉文件夹路径中的空格

    注册表未成功添加插件信息,需要用户手动双击”install.reg”添加插件信息到注册表


    源码

    教程完整版word和项目源码下载:

    https://pan.baidu.com/s/1ufSfrzU5XKlCa9nhyp9tqQ

    展开全文
  • WPS插件开发流程(1)

    万次阅读 多人点赞 2018-05-02 09:02:53
    于是我决定把用C#和Visual Studio开发WPS插件的每一个具体步骤分享出来,让免费分享精神继续传递下去,希望对需要的朋友提供一些帮助。(一)开发前准备1. 操作系统在Win10系统中引用WPS的dll文件可能会受到系统权限...

    OneKey_Lite是一款由 @只为设计 独立开发的WPS演示免费插件。在开发过程中,感恩于网上那些无私分享代码的陌生人,给我这个开发小白提供了重要的借鉴参考。于是我决定把用C#和Visual Studio开发WPS插件的每一个具体步骤分享出来,让免费分享精神继续传递下去,希望对需要的朋友提供一些帮助。

    WPS插件开发流程(1)

    (一)开发前准备

    1. 操作系统

    在Win10系统中引用WPS的dll文件可能会受到系统权限限制的问题,可以尝试在Administrator账户中安装WPS Office 2016专业版及进行后续开发。如果使用Win7系统,比较顺利

    2. IDE集成开发环境

    Microsoft Visual Studio 2017 Community 社区免费版

    3. WPS Office 2016

    • WPS Office 2016专业版。专业版无需激活也可进行开发,推荐
    • WPS Office 2016个人版。个人版需运行专业版自带的WPSOfficePIA.exe注册程序集后方可正常引用WPS的相关DLL

    (二)创建项目

    1. 启动Visual Studio-文件-新建-项目

    WPS插件开发流程(1)

    2. 已安装→Visual C#-类库(.NET Framework)→输入名称→选择框架→确定

    WPS插件开发流程(1)

    生成的新项目如下图

    WPS插件开发流程(1)

    3. 在解决方案资源管理器中的项目上右键→属性→应用程序→程序集信息

    WPS插件开发流程(1)

    4. 修改相应信息→勾选“使程序集COM可见”→ 确定

    WPS插件开发流程(1)

    5. 切换到“生成”→勾选“为COM互操作注册”

    WPS插件开发流程(1)

    6. 切换到“调试”→勾选“启动外部程序”→浏览→找到WPS安装文件夹中的相应exe程序

    WPS插件开发流程(1)

    7. 切换到“签名”→勾选“为程序集签名”→新建密钥文件→输入名称→输入密码(也可不输入)→确定后完成项目属性设置

    WPS插件开发流程(1)

    (三)添加引用

    1. 在项目的“引用”上右键→添加引用

    WPS插件开发流程(1)

    2. 选中“COM”→勾选“Kingsoft Add-In Designer”

    WPS插件开发流程(1)

    3. 继续勾选“Upgrade WPS Presentation 3.0 Object Library(Beta)”→确定

    提示: Upgrade WPS Office 3.0 Object Library对应的是WPS文字、Upgrade WPS Spreadsheets 3.0 Object Library对应的是WPS表格

    WPS插件开发流程(1)

    4. 添加上述两个引用后会自动添加以下引用

    WPS插件开发流程(1)

    提示:若添加后提示引用出错,可以尝试的解决方法有:

    • 以Administrator账户登录Windows
    • 以管理员身份运行Visual Studio
    • 在Administrator账户中,以管理员身份安装WPS Office
    • WPS Office个人版需要运行专业版中的 WPSOfficePIA.exe 以注册所引用的程序集
    • 安装WPS Office专业版,安装时WPS会自动注册相关程序集

    (四)添加资源文件

    1. 在Properties上右键→添加→新建项→找到“资源文件”→输入或保持默认名称→添加

    WPS插件开发流程(1)

    2. 在打开的Resource1.resx里→添加资源→添加新文本文件→输入名称→添加

    WPS插件开发流程(1)

    3. 创建文本文件后→在打开的txt里粘贴以下代码

    WPS插件开发流程(1)

    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    	<ribbon startFromScratch="false">
    		<tabs>
    			<tab id="MyTab" label="我的插件" visible="true" insertAfterMso="TabDeveloper">
    				
    				<group id="Test" label= "组名称"> 
    					<button id="Test" label="Hello" onAction="Test" getImage="GetRibbonImage" size="large"/>
    				</group>
    			</tab>
    		</tabs>
    	</ribbon>
    </customUI>

    说明:

    • tabs表示选项卡,id是“MyTab”,显示的名称是“我的插件”,在“开发工具”选项卡之后插入本选项卡
    • group表示选项卡中的组,id是“Test”,名称是“组名称”
    • button表示命令按钮,id是“Test”,名称是“Hello”,回调“Test”事件,从“GetRibbonImage”事件中获取按钮图标,按钮显示大尺寸
    • Id、Label、onAction、getImage引号中的字符可以自定义,且保证唯一性

    4. 在Resource1.resx中→添加资源→添加现有文件→选择图标文件

    WPS插件开发流程(1)

    添加后的图标会显示在Resource1.resx中

    WPS插件开发流程(1)

    5. 在Resource1.resx中添加相关资源后,在解决方案资源管理器中会自动生成Resources文件夹以及添加好的资源

    WPS插件开发流程(1)

    提示:直接在项目所在的Resources文件夹中添加资源是不行的,资源文件并没有与项目产生关联,应该在VS中的Resource1.resx中添加

    (五)修改主类

    1. 点击解决方案资源管理器中默认的Class1.cs→输入自己插件的名称→回车后点”是”

    WPS插件开发流程(1)

    提示:本文以“MyAddin”这个名称为例

    2. 在Using别名区添加相关的引用名称

    WPS插件开发流程(1)

    using AddInDesignerObjects;
    
    using Office;
    
    using PowerPoint;

    3. 在public class MyAddin后面添加调用接口

    WPS插件开发流程(1)

    public class MyAddin : IDTExtensibility2, IRibbonExtensibility

    4. 鼠标分别置于 IDTExtensibility2和IRibbonExtensibility上→点击黄色小灯泡→实现接口→VS会自动添加相关事件

    WPS插件开发流程(1)

    WPS插件开发流程(1)

    5. 声明公共静态全局变量app和wpp

    WPS插件开发流程(1)

    public static PowerPoint.Application app = null;
    public static object wpp;

    6. 在OnConnection事件中初始化wpp和app

    WPS插件开发流程(1)

    wpp = Application;
    app = wpp as PowerPoint.Application;

    7. 在GetCustomUI事件中调用在Resource1.resx中添加的MyRibbon.txt

    WPS插件开发流程(1)

    return Properties.Resource1.MyRibbon;

    提示:调用资源文件时无需添加具体的扩展名

    8. 添加GetRibbonImage事件,用于插件获取按钮图标

    WPS插件开发流程(1)

    public Bitmap GetRibbonImage(IRibbonControl ctrl)
            {
                switch (ctrl.Id)
                {
                    case "Test":
                        return Properties.Resource1.OKUI_1;
                }
                return null;
            }

    提示:若要给别的按钮添加图标,在GetRibbonImage事件中补充相关代码。这里的Test是Hello按钮的id,OKUI_1是Resource1.resx中图标的名称

    9. 鼠标置于Bitmap上→点击黄色小灯泡→点“Using System.Drawing;”,VS会在顶部的Using别名区自动添加相应的Using别名

    WPS插件开发流程(1)

    10. 添加Test事件

    WPS插件开发流程(1)

            public void Test(IRibbonControl ctrl)
            {
                MessageBox.Show("Hello World");
            }

    提示:MessageBox需要引用System.Windows.Forms。引用方法如下:

    (1)在解决方案资源管理器中→在引用上右键→添加引用

    WPS插件开发流程(1)

    (2)选中程序集→勾选“System.Windows.Forms”→确定

    WPS插件开发流程(1)

    (3)在Using别名区引用System.Windows.Forms

    WPS插件开发流程(1)

    using System.Windows.Forms;

    (4)波浪线消失,我们可以正常调用消息框了

    WPS插件开发流程(1)

    最后:其它几个事件可为空,也可根据自己需求添加代码。

    (六)添加注册表信息

    1. 安装

    打开记事本→粘贴以下代码→另存为install.reg→双击install.reg文件安装插件

    WPS插件开发流程(1)

    Windows Registry Editor Version 5.00
    [HKEY_CURRENT_USERSOFTWAREMicrosoftOfficePowerPointAddinsWPP_test.MyAddin]
    "FriendlyName"="友好名称"
    "Description"="插件描述"
    "LoadBehavior"=dword:00000003
    "CommandLineSafe"=dword:00000001
    [HKEY_CURRENT_USERSoftwareKingsoftOfficeWPPAddinsWL]
    "WPP_test.MyAddin"=""

    2. 卸载

    打开记事本→粘贴以下代码→另存为uninstall.reg→双击uninstall文件卸载插件

    WPS插件开发流程(1)

    Windows Registry Editor Version 5.00
    [-HKEY_CURRENT_USERSOFTWAREMicrosoftOfficePowerPointAddinsWPP_test.MyAddin]
    [HKEY_CURRENT_USERSoftwareKingsoftOfficeWPPAddinsWL]
    "WPP_test.MyAddin"=-

    说明:

    (1)因为开发的是WPS演示的插件,所以注册表路径分别对应的是PowerPoint和WPP

    WPS插件开发流程(1)

    需要注意的是,无论电脑中有没有安装Microsoft Office,都应这样写

    (2)这里的WPP_test是插件项目的名称,MyAddin是插件主类库的名称

    WPS插件开发流程(1)

    (3)若开发的是WPS文字、WPS表格的外接程序,则注册路径中:WPS文字对应的是Word和WPS;WPS表格对应的是Excel和ET

    (七)运行

    1. 点击VS中的启动按钮启动wpp.exe

    WPS插件开发流程(1)

    2. 切换到“我的插件”选项卡→点击Hello按钮→弹出对话框→插件的基本创建就完成了

    WPS插件开发流程(1)

    待续

    时间所限,目前先到这里。至于如何让普通用户也安装使用插件,以及项目源码我会在文章全部更新完成后分享.

    展开全文
  • 金山WPS开发工具excel宏VBA插件,下载后运行vba6chs.msi安装插件(安装前先关闭WPS表格程序)。安装成功后再次打开WPS表格,开发工具就可以用宏编写VBA程序了。
  • WPS VBA插件

    2016-11-26 17:40:21
    VBA宏
  • C#开发WPS插件入门

    千次阅读 2019-03-20 20:27:17
    也是刚接触VSTO开发,具体怎么创建工程可以参考博客https://blog.csdn.net/wenjian005/article/details/80161633 WPS插件开发流程(1) 写的非常棒,我就是按这个入门的的,不过他采用的是Microsoft Visual Studio....
  • 我们目前知道创建wps的插件有两种实现方式,第一种是基于类库的方式,参考WPS插件开发流程(1);另一种方式是直接创建office的vsto程序,再手动改写注册表使得wps能够识别和调用。但是就第二种开发方式而言,如果...
  • c#+wps插件开发(1)

    千次阅读 2018-05-06 10:04:47
    一、开发环境以VS2013为例wps官网最新的免费个人版win10专业版二、可能遇到的问题VS以管理员身份运行,创建项目,添加Kingsoft Add-In Designer引用,可能会失败,提示:未能添加对"kingsoft WPS x.0 Object ...
  • 用C#开发WPS插件源码,往WPS工具栏中插入自定义菜单和往单元格右键菜单添加自定义菜单,开发环境:VS2010。
  • WPS Office是一款免费(但不开源)的办公套件,目前已经在Windows、macOS、Android、iOS和Linux设备上线,由于在界面和功能上模仿了微软Office的部分特性,对于那些轻量办公的用户来说已经能够完全驾驭大部分需求。...
  • VBA For WPS插件,支持WPS 2019~2020版、校园版,完美开启开发工具 宏功能,文件内含安装方法。
  • 使用VBA进行WPS插件开发[用VB开发]

    千次阅读 2008-06-13 12:57:00
    1.wps2003和wps2005实现的接口方法是一样的,只是他们的方法名称有所变化,而且在wps2003中写的插件,不用修改可以直接在wps2005中使用,开发wps插件Option ExplicitImplements IKExtensibility这儿可以定义一些全局...
  • WPSJS 插件开发离线部署方式

    千次阅读 2021-06-16 22:32:33
    jsplugins.xml模式是通过设置oem.ini配置文件的JSPluginsServer的值为加载项管理文件jsplugins.xml来控制加载项的加载(相当于WPS加载项列表文件),二次打包时,业务开发商需要告知我们JSPluginsServer的配置地址...
  • VSTO添加到WPS方法

    2021-06-27 17:59:03
    VSTO添加到WPS,使得wps也能用VSTO开发插件,进行调试等等
  • wps 基于vue加载项excel插件开发
  • WPS二次开发简单示例

    千次阅读 2021-05-17 17:12:49
    有时候软件会有报告生成的功能需求,一般都用MS OFFICE开放的接口来开发,但是MS OFFICE不是免费的,可以考虑用WPS开放的接口。MS OFFICE和WPS的接口其实差不太多。那么具体要怎样才可以用WPS开放的接口生成doc文档...
  • wps windows二次开发说明文档,内含Demo程序,可直接参考使用,有各种文档的操作API说明。包括wps文字 、wpp、ET格式的API手册。
  • WPS PDF Tools-crx插件

    2021-03-28 18:27:50
    WPS Office的官方PDF扩展。 简介:如果您想在线阅读,编辑和传输PDF文件,此扩展程序可以为您提供许多有用的功能。 如果同时使用此扩展名和我们的PDF软件,您将获得更好的在线和离线编辑文件的体验。 现在,该扩展...
  • 麻烦问下各位大神,在Linux下的qt4环境中,已经得到了qt的document对象,怎么将该对象传给其他窗体呢,谢谢! 下面这个pDoc就是当前打开文档的对象,我想传给其他页面或窗体或者直接获取到当前文档的文字内容,刚...
  • wps 基于vue加载项ppt相关插件开发
  • 建了一个zotero-wps插件开发项目,感兴趣的同学一起去那边交流吧,争取早日搞定这个插件,可以在linux下同时使用wps和zotero。zotero-wps插件开发的交流QQ群:1029775161,https://github.com/l0o0/Zotero-WPS 补充1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,150
精华内容 1,260
关键字:

wps插件开发

友情链接: ft.rar