Ribbon界面的Office插件开发

      此乃开博第一篇也。Office插件开发是一项古老的技术,似乎从office2000开始,Office的插件体系就已经固定下来,后续版本也只是在不断完善和加入新功能。Office插件是在COM模型的基础上,实现了特定的接口,进而通过COM技术进行相互操作的一个dll文件。通过在相应的注册表位置进行注册,就可以被Office程序调用。

在继续本篇教程之前,先来介绍一下本次开发的基本环境:

开发工具:Delphi 7 企业版

系统环境:Win7 64位系统 安装WPS Office 2013SP3(9.1.0.4953)

      基于WPS V9版的API,这个版本基本兼容 MS Office 2007,你也可以基于MS OfficeAPI接口,效果是一样的。本教程同时可用于MS Office 和 WPS Office

Office插件是一个实现了IDTExtensibility2接口的COM组件,在导入相应的类型库后就可以引用AddInDesignerObjects_TLB.pas的相关接口,它的声明如下:

  _IDTExtensibility2 = interface(IDispatch)
    ['{B65AD801-ABAF-11D0-BB8B-00A0C90F2744}']
    procedure OnConnection(const Application: IDispatch; ConnectMode: ext_ConnectMode; 
                           const AddInInst: IDispatch; var custom: PSafeArray); safecall;
    procedure OnDisconnection(RemoveMode: ext_DisconnectMode; var custom: PSafeArray); safecall;
    procedure OnAddInsUpdate(var custom: PSafeArray); safecall;
    procedure OnStartupComplete(var custom: PSafeArray); safecall;
    procedure OnBeginShutdown(var custom: PSafeArray); safecall;
  end;

 

在此不多做介绍,具体可参考MSDN,里面有详细的介绍。

Ribbon界面是Office2007新增的界面,这个界面的插件开发,将界面设计与功能实现进行了分离,界面以XML文件进行定义,功能实现以回调函数的形式调用,与传统的工具栏和菜单形式的插件相比,开发效率要高的多,本教程要介绍的就是这一技术。

在实现Ribbon界面,在插件中除了要实现IDTExtensibility2接口外,还要实现Ribbon界面的专用接口IRibbonExtensibility,这个接口定义在Office的类型库中,声明如下:

 

  IRibbonExtensibility = interface(IDispatch)
    ['{000C0396-0000-0000-C000-000000000046}']
    function GetCustomUI(const RibbonID: WideString): WideString; safecall;
  end;

 

这个接口只有一个方法GetCustomUI,返回值为界面设计的XML文件内容。我们本次要实现的界面XML内容如下:

 

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="DemoTab" label="育林软件">
                <group id="loadFormsGroup" label="测试分组">
                    <button id="btn1" label="测试功能" onAction="OnAction" getImage="GetImage"/>
                    <button id="btn2" label="关于我们" onAction="OnAction" getImage="GetImage"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

 

关于XML的定义规则请参考MSDN,上面有详细介绍。OnAction是回调函数,用于响应按钮点击,GetImage用于返回按钮的图片。

我们的COM对象定义如下:

 

type
  TTestRibbon = class(TAutoObject, IDTExtensibility2, IRibbonExtensibility, ITestRibbon)
  private

  protected
    {实现IRibbonExtensibility接口}
    function GetCustomUI(const RibbonID: WideString): WideString; safecall;
    {实现IDTExtensibility2接口}
    procedure OnConnection(const Application: IDispatch; ConnectMode: ext_ConnectMode;
      const AddInInst: IDispatch; var custom: PSafeArray); safecall;
    procedure OnDisconnection(RemoveMode: ext_DisconnectMode; var custom: PSafeArray); safecall;
    procedure OnAddInsUpdate(var custom: PSafeArray); safecall;
    procedure OnStartupComplete(var custom: PSafeArray); safecall;
    procedure OnBeginShutdown(var custom: PSafeArray); safecall;
    {实现ITestRibbon接口,这两个方法就是我们要用的回调函数}
    procedure OnAction(const ctrl: IDispatch); safecall;
    function GetImage(const ctrl: IDispatch): IDispatch; safecall;
  public

  end;

 

ITestRibbon是我们com对象定义的接口,它有两个方法OnActionGetImage,如果XML中定义的控件较多,我们需要添加的回调函数就越多,每种控件的回调函数都是大同小异,我们实现的就是针对普通按钮的回调函数,需要在delphi的类型库编辑器中添加,如下图。

 

     OnAction你也可以定义为其它名称,只要参数类型相同,什么名字都可以,但要注意名称一定要跟XML中定义的一样,也就是说你这里定义的什么名字,XML文件中onActon后面也要用什么名字。类型库导入完成,接口定义完成就开始实现部分了,这才是重点。说实话,在接口定义部分我也走了不少弯路,研究了几个晚上才搞明白,网上基于.net的相关内容不少,但参考性不强,.netcom的实现进行了封装,开发者不用关心定义,只要写代码就可以了,但delphi要做的工作还有很多。虽然麻烦,但好处还是有的,.net开发的插件要附带很多文件,delphi开发的插件只要发布一个dll就可以了。

下面我们来看实现部分,先看GetCustomUI

 

function TTestRibbon.GetCustomUI(const RibbonID: WideString): WideString;
var Str:TStrings;
begin
  Str:=TStringList.Create;
  Str.LoadFromFile('C:\CustomUI.xml');
  Result := Str.Text;
  Str.Free;
end;

     这里我们选择从文件载入XML数据,主要是为了后期修改与调试方便,等到发布的时候,完全可以将XML文件加入进资源文件,从资源中载入。

到这里,如果我们编译后安装插件,就可以在Office中显示我们的按钮了,但由于没有实现OnAction,所以点击按钮是没有任何反应的,下面我们来实现OnAction回调函数。它的定义如下:

procedure OnAction(const ctrl: IDispatch); safecall;

根据微软的定义,ctrl是一个IRibbonControl接口的参数,这个接口定义在Office的通用类型库中,这个参数是我们判断到底是哪个按钮调用了这个函数的基础,就是依据IRibbonControlID属性,这个ID就是XML中定义的Id,我们的实现如下:

 

procedure TTestRibbon.OnAction(const ctrl: IDispatch);
begin
  if (ctrl as IRibbonControl).Id = 'btn1' then
    MessageBox(0, '您点击了按“测试功能”!', '提示', MB_OK + MB_ICONINFORMATION)
  else
    MessageBox(0, '您点击了按钮“关于我们”!', '提示', MB_OK + MB_ICONINFORMATION);
end;

到此一个简单的插件就已经完成了,下面说一下插件安装。

将以下内容保存为注册表文件.reg,并双击导入注册表。

 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\Word\Addins\Yulinsoft.TestRibbon]
"FriendlyName"="测试Ribbon插件"
"Description"="测试插件"
"LoadBehavior"=dword:00000003
"CommandLineSafe"=dword:00000001

[HKEY_CURRENT_USER\Software\Kingsoft\Office\WPS\AddinsWL]
"Yulinsoft.TestRibbon"=""

 

然后再用命令行regsvr32注册我们的dll,注意文件路径正确,注册成功后打开Word2007WPS,就可以看到我们的按钮了,如下图:

【原创文章,转载请注明出处】 

本教程全部代码与资源文件下载:

http://pan.baidu.com/s/1eQrSOSE

本文参考内容如下:

http://gregmaxey.mvps.org/word_tip_pages/customize_ribbon_main.html

Customizing the 2007 Office Fluent Ribbon for Developers (Part 1 of 3)

Customizing the 2007 Office Fluent Ribbon for Developers (Part 2 of 3)

Customizing the 2007 Office Fluent Ribbon for Developers (Part 3 of 3)

初来贵地交流技术,如有不对之处,欢迎大家批评指证。下节我们将讲解如何给按钮添加图像!

 

转载于:https://www.cnblogs.com/yulinsoft/p/4603912.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要开发 Office 加载项,首先需要满足一些系统需求,包括: - 安装 Office 开发人员工具,可以在 Office 安装包中找到,也可以从 Microsoft 官网下载。 - 安装 Visual Studio,并使用其中的模板创建 Office 项目。 - 配置开发环境,包括安装所需的 .NET Framework 版本和其他依赖项。 一旦满足了这些系统需求,就可以开始开发 Office 加载项了。下面是一些常见步骤: 1. 选择要开发Office 应用程序,例如 Word、Excel 或 PowerPoint。 2. 创建 Office 项目,并选择要使用的加载项类型。常见的加载项类型有「功能区」和「任务窗格」。 3. 在项目中添加代码,实现加载项的目的。这可能包括: - 使用 Office 对象模型(OM)访问和操作 Office 文档。 - 处理用户在加载项中的输入。 - 与 Office 应用程序交互,例如显示对话框或通知用户操作完成。 4. 调试和测试加载项,确保其正常工作。 5. 发布加载项,让其他用户可以安装和使用它。 希望这些信息能帮助你开始 Office 加载项的开 ### 回答2: Office加载项是一种可以在Office应用程序中添加自定义功能和功能的扩展。要开发Office加载项,可以按照以下步骤进行: 1. 开发环境准备:首先,需要安装并设置开发环境。这包括安装Visual Studio工具和Office开发工具(VSTO)插件。 2. 创建项目:在Visual Studio中,可以选择使用C#或VB.NET来创建一个新的Office加载项项目。选择适当的Office应用程序(如Word、Excel、PowerPoint等),以及加载项类型(如Ribbon、自定义任务窗格等)。 3. 设计界面:根据加载项的类型,可以在Visual Studio中设计加载项的用户界面。例如,可以设计一个自定义的Ribbon界面,包含自定义按钮和菜单项。 4. 编写代码:根据加载项的需求,编写相应的逻辑代码。可以使用提供的Office开发工具库和API,来与Office应用程序进行交互。例如,可以通过代码方式,读取和修改文档内容,执行各种操作等。 5. 调试和测试:在开发过程中,可以使用Visual Studio提供的调试工具来进行加载项的调试。可以模拟各种场景,测试加载项在不同情况下的功能和性能。 6. 部署和发布:完成开发和测试后,可以将加载项打包为一个安装程序或部署包。根据需要,可以将加载项发布到Office应用商店、共享文件夹等位置,以供其他用户安装和使用。 7. 更新和维护:随着Office版本的更新和用户需求的变化,可能需要对加载项进行更新和维护。可以根据需要,调整代码和功能,发布新的版本以提供更好的用户体验。 总之,开发Office加载项需要一定的开发经验和技能,同时也需要熟悉Office应用程序的特性和API。通过合理的设计和编码,可以为Office用户提供更丰富和定制化的功能扩展。 ### 回答3: Office 加载项是一种可以在 Office 软件中扩展功能的开发工具。下面是开发 Office 加载项的一些基本步骤: 1. 确定所需的 Office 软件版本:根据所需功能和用户群体,确定要在哪些 Office 软件中开发加载项,比如 Word、Excel 或 PowerPoint。 2. 选择开发平台和工具:根据加载项的需求和个人技能,选择合适的开发平台和工具。常用的开发平台包括 Office 插件模型 (Office Add-in Model)、Visual Studio Tools for Office (VSTO)、JavaScript API for Office 等。 3. 设计加载项:根据功能需求,设计加载项的用户界面和交互逻辑。可以使用 HTML、CSS 和 JavaScript 开发用户界面,也可以使用 .NET 平台开发 C# 或 VB.NET 代码来与 Office 应用程序交互。 4. 编码实现:使用所选的开发工具编写加载项的代码。使用 Office 插件模型时,可以使用各种编程语言,如 JavaScript、TypeScript、C# 等。 5. 测试和调试:在 Office 软件中加载和测试加载项。确保加载项能正常运行,与 Office 应用程序的协作无误。使用开发工具提供的调试功能进行代码调试,修复存在的问题。 6. 发布和分发:将加载项打包成适合 Office 软件版本的安装包,并发布到适当的分发渠道,如 Office Store 或内部的企业应用商店。 7. 更新和维护:根据用户反馈和需求变化,及时更新和维护加载项。修复潜在的问题,添加新功能以提升用户体验。 通过以上步骤,可以开发出功能丰富且与 Office 软件无缝协作的加载项,为用户提供更加便捷和高效的办公体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值