最新WPS办公软件学习教程_免费企业办公软件下载_金山WPS Office官网论坛

 找回密码
 
查看: 165|回复: 28

[.net] 用C#.NET实现ET的Ribbon界面2(VSTO方式)

  [复制链接]

84

主题

59

听众

3088

积分

测试体验团员

系统分析师

Rank: 14Rank: 14Rank: 14Rank: 14

该用户从未签到

金币
984
威望
8204
帖子
842
精华
3

WPS粉丝团 技术分享团 解答支持团 测试体验团 重阳节勋章 技巧教程分享达人 最佳教程奖 优秀会员奖

发表于 2015-5-2 15:39 |显示全部楼层
分享到: 新浪微博 腾讯微博
之前,@卡卡尼莫 已经在《[.net] 一步步进行WPS插件开发(C#):.NET开发WPS表格插件编程基础》一文中讲述了如何实现C#.NET实现工具栏,现在我来补充说明如何实现Ribbon界面。

推荐:用C#.NET实现ET的Ribbon界面1(类库方式)

我的开发平台是:
操作系统:Windows 8.1 with update
开发工具:Visual Studio 2013 with update4
WPS版本:V9版本(9.1.0.4895,专业增强版)

示例源代码下载:
1、以管理员身份运行Visual Studio 2013,文件,新建,项目,选择Visual C#、Office/SharePoint、Office外接程序下的Excel 2013外接程序

2、添加一个新建项,功能区(XML)



3、添加后,在MyRibbon.cs中可以看到操作步骤

4、按要求,将以下代码复制到ThisAddin类中
  1. protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
  2.         {
  3.             return new MyRibbon();
  4.         }
复制代码
5、打开MyRibbon.xml文件,将里面的代码除第一行外全部删除,并换上我们上一节的示例代码



6、按上一节的方法,添加一个资源文件,设置权限为Public,并添加两张图片(不用添加文本文件)



7、下面在MyRibbon.cs添加MyRibbon.xml中的两个回调函数GetRibbonImage和GetRibbonOnAction代码和相应using语句
最后MyRibbon.cs的代码全部如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Runtime.InteropServices;
  7. using System.Text;
  8. using Office = Microsoft.Office.Core;
  9. using System.Windows.Forms;
  10. using System.Drawing;
  11. // TODO:    按照以下步骤启用功能区(XML)项:
  12. // 1. 将以下代码块复制到 ThisAddin、ThisWorkbook 或 ThisDocument 类中。
  13. //  protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
  14. //  {
  15. //      return new MyRibbon();
  16. //  }
  17. // 2. 在此类的“功能区回调”区域中创建回调方法,以处理用户
  18. //    操作(如单击某个按钮)。注意:  如果已经从功能区设计器中导出此功能区,
  19. //    则将事件处理程序中的代码移动到回调方法并修改该代码以用于
  20. //    功能区扩展性(RibbonX)编程模型。
  21. // 3. 向功能区 XML 文件中的控制标记分配特性,以标识代码中的相应回调方法。  
  22. // 有关详细信息,请参见 Visual Studio Tools for Office 帮助中的功能区 XML 文档。
  23. namespace ETVSTOTYEX
  24. {
  25.     [ComVisible(true)]
  26.     public class MyRibbon : Office.IRibbonExtensibility
  27.     {
  28.         private Office.IRibbonUI ribbon;
  29.         public MyRibbon()
  30.         {
  31.         }
  32.         #region IRibbonExtensibility 成员
  33.         public string GetCustomUI(string ribbonID)
  34.         {
  35.             return GetResourceText("ETVSTOTYEX.MyRibbon.xml");
  36.         }
  37.         #endregion
  38.         #region 功能区回调
  39.         //在此创建回调方法。有关添加回调方法的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=271226
  40.         public void Ribbon_Load(Office.IRibbonUI ribbonUI)
  41.         {
  42.             this.ribbon = ribbonUI;
  43.         }
  44.         #endregion
  45.         #region 帮助器
  46.         private static string GetResourceText(string resourceName)
  47.         {
  48.             Assembly asm = Assembly.GetExecutingAssembly();
  49.             string[] resourceNames = asm.GetManifestResourceNames();
  50.             for (int i = 0; i < resourceNames.Length; ++i)
  51.             {
  52.                 if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
  53.                 {
  54.                     using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
  55.                     {
  56.                         if (resourceReader != null)
  57.                         {
  58.                             return resourceReader.ReadToEnd();
  59.                         }
  60.                     }
  61.                 }
  62.             }
  63.             return null;
  64.         }
  65.         #endregion
  66.         //Ribbon界面的回调函数,返回图像
  67.         public Bitmap GetRibbonImage(Office.IRibbonControl ctrl)
  68.         {
  69.             Bitmap myBitmap;
  70.             switch (ctrl.Id) //这里只有两张图片可以用if语句,但图片多了用switch,下面的事件响应也同理
  71.             {
  72.                 case "Mu_TYCS":
  73.                     myBitmap = MyRes.TYbmp1; break;
  74.                 case "Bt_TYABOUT":
  75.                     myBitmap = MyRes.TYbmp2; break;
  76.                 default:
  77.                     myBitmap = null; break;
  78.             }
  79.             return myBitmap;
  80.         }
  81.         //Ribbon界面的回调函数,响应事件
  82.         public void GetRibbonOnAction(Office.IRibbonControl ctrl)
  83.         {
  84.             switch (ctrl.Id)
  85.             {
  86.                 case "Bt_TYCS1":
  87.                     Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.Cells[1, 1].Value = "测试1功能"; break;
  88.                 case "Bt_TYCS2":
  89.                     Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.Cells[1, 1].Value = "测试2功能"; break;
  90.                 case "Bt_TYABOUT":
  91.                     MessageBox.Show("关于天远ET工具箱 C#开发版本 示例"); break;
  92.                 default:
  93.                     break;
  94.             }
  95.         }
  96.     }
  97. }
复制代码
8、生成程序,并添加注册表。(不需要添加Office的注册表,因为在生成程序时已经生成)
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CURRENT_USER\Software\Kingsoft\Office\ET\AddinsWL]
  3. "ETVSTOTYEX"=""
复制代码
9、结果





本帖子中包含更多资源

您需要 登录 才可以下载或查看,

已有 3 人评分威望 收起 理由
翘尾的k + 10 WPS有你更精彩!
zhouyiran1@126.com + 30 WPS有你更精彩!
卡卡尼莫 + 30 这么好的教程贴,我和我的小伙伴们都惊呆了.

总评分: 威望 + 70   查看全部评分

热爱分享和学习。希望WPS论坛越办越好,WPS软件越做越好。也希望能在这里交到更多志同道合的朋友。我的邮箱:ypr@yprnet.com
我在WPS论坛上的教程帖子合集: http://blog.yprnet.com/wps

311

主题

37

听众

1万

积分

技术分享团员

Rank: 14Rank: 14Rank: 14Rank: 14

签到天数: 1083 天

[LV.10]以坛为家III

金币
3510
威望
22843
帖子
4234
精华
0

WPS粉丝团 技术分享团 测试体验团 重阳节勋章 优秀会员奖 技巧教程分享达人 乐于助人奖 活跃会员奖

发表于 2015-5-3 17:49 |显示全部楼层

好帖子,来支持了!
回复

使用道具 举报

0

主题

1

听众

27

积分

LV.1

Rank: 1

该用户从未签到

金币
3
威望
53
帖子
14
精华
0
发表于 2015-6-19 16:17 |显示全部楼层
楼主求教:用vs2013社区版,提示“与当前版本不兼容”。是什么问题?
是因为用的wps个人版?还是没安装ms office2010以上版本的原因?
回复

使用道具 举报

9

主题

22

听众

1万

积分

测试体验团员

Rank: 14Rank: 14Rank: 14Rank: 14

签到天数: 1171 天

[LV.10]以坛为家III

金币
2143
威望
26419
帖子
6175
精华
0

优秀会员奖 活跃会员奖 乐于助人奖 测试体验团

发表于 2015-6-21 14:58 |显示全部楼层

好帖子,来支持了!
回复

使用道具 举报

8

主题

3

听众

157

积分

LV.3

Rank: 3Rank: 3

签到天数: 10 天

[LV.3]偶尔看看II

金币
10
威望
376
帖子
63
精华
0
发表于 2015-6-23 15:47 |显示全部楼层
感谢楼主,前来学习。
回复

使用道具 举报

0

主题

0

听众

15

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
1
帖子
3
精华
0
发表于 2015-6-23 21:05 |显示全部楼层

好帖子,来支持了!
回复

使用道具 举报

0

主题

1

听众

27

积分

LV.1

Rank: 1

该用户从未签到

金币
3
威望
53
帖子
14
精华
0
发表于 2015-7-9 09:00 |显示全部楼层
有个问题,如果不安装ms office的话,还能这样用不?
回复

使用道具 举报

0

主题

0

听众

18

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
31
帖子
0
精华
0
发表于 2015-7-16 15:56 |显示全部楼层
wps成了office的亲兄弟
回复

使用道具 举报

0

主题

0

听众

25

积分

LV.1

Rank: 1

签到天数: 1 天

[LV.1]初来乍到

金币
4
威望
47
帖子
8
精华
0
发表于 2015-12-8 08:02 |显示全部楼层
楼主的帖子怎么样?赶紧试试这里        WPS有你更精彩!的快速回复给楼主点评论吧
回复

使用道具 举报

2

主题

0

听众

6

积分

LV.1

Rank: 1

该用户从未签到

金币
3
威望
17
帖子
0
精华
0
发表于 2016-1-19 17:39 |显示全部楼层
好贴留名,只为威望,求给力
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 更多账号登录:

快速回帖:

fastpost

WPS论坛更新日志|WPS Office官方论坛     

GMT+8, 2017-12-14 18:12

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部