ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 高效办公必会的Office实战技巧 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 12091|回复: 21

[原创] 【VSTO系列】EXCEL 2010的一个倒退,暨“智能标签”在新版本中的变化【附源代码】

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-5-24 21:24 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:VSTO开发
本帖最后由 儒道佛 于 2012-11-10 09:22 编辑

【VSTO系列文章之:智能标签@20100524-01】

一、什么是“智能标签”

    先看看“智能标签”在WIKI上的定义:“智能标签”,英文称为Smart Tag,是一种在 Microsoft Word 97 开始出现的一种协助工具,它会在特定的区块中显示一个小符号(大多数为 "!" 的小图标),当用户将鼠标指针移上去时,可以看到一个快显菜单 (Context Menu),方便用户可以运行特定工作,目前已广泛使用在 Microsoft Office 与 Internet Explorer 产品,而 Visual Studio 2005 开始,也在设计工具中激活了智能标签的支持。

二、“智能标签”的实现原理

    Smart Tag 是由 Microsoft Office 中的 “Microsoft Office Smart Tag Library”(MOSTL) 库开放的一组 API 所开发出来的,它使用了以下两个主要的接口:
1、ISmartTagRecognizer接口:
描述来自 Microsoft Office 文件中的特定文字,当指定的文字出现时,即会引导对应的 ISmartTagAction 接口中的方法。
2、ISmartTagAction接口:
接收来自于 ISmartTagRecognizer 的指令,以运行特定的动作。
    MOSTL 是一种支持 COM Automation 的接口组件,可以利用像 Visual Basic 6.0 或 C/C++ 或 .NET 编程语言(C# 或 VB.NET)来开发自定义的“智能标签”。

三、“智能标签”在office2010中的重大变化

    智能标签长期以来一直为广大office爱好者忽略,只有少量的“智能标签”被使用,大多数人甚至不知道“智能标签”是什么。许多智能标签依赖于特定的系统存在,特别是Outlook。标签也将会影响到系统的性能,尤其是在Word系统中,所以默认情况下,“智能标签”是关闭的。随着计算机的运行速度越快,有更多的内存,性能问题已缓和。所以在现如今,无论你的系统,甚至是在Word中,“智能标签”都是值得体验的,虽然他们有局限性,并没被微软在office 2007之前的8年中一直没有大的变动。
    然而“智能标签”在office 2010中发生了重大变化,尤其是体现在Excel 2010中。首先在2010版的Office中,“智能标签/Smart Tag“的称呼发生的变化,现在称之为“动作/Action”。重点是在操作上,office 2010 比之 office 2007及以前的版本有了巨大的变化,具体分为以下四种情况:
    【Word 2007及以前】:当有一些文字被检测合格时,出现一个小图标以及紫色虚线标示。
    【Word 2010】:小图标和紫线已消失,取而代之的是你必须用鼠标右键单击,以选择更多的行动。
    【Excel 2007及以前】:当有一些文字被匹配时,出现一个小图标或强调+小图标。
    【Excel 2010】:小图标和强调均己被消失,取而代之的是你必须用鼠标右键单击,以选择更多的行动,以下以Excel为例:


    Excel2007的图示如下:
    SmartTag2010.png


  Excel2010的图示如下:
    SmartTag2007.png

    在Office 2010“智能标签/动作”不再突出,没有强调或图标,而是必须用鼠标右键单击选择其他选项,以查看有什么可用的,这便是严重的倒退!

四、可选择的“智能标签”

1、ctiveDocs™
提供智能标记解决方案,以便您创建自己的 Microsoft Word 智能标记,不必离开文档即可访问所需的信息。您还可以连接到外部数据源,以节省大量时间并提高工作效率 - 不必进行任何编程!

2、DataPortal™
智能标记加载项使 Office 用户能够轻松创建并共享智能标记。使用 DataPortal 向导创建链接到任何企业数据库的智能标记的过程不太复杂,单击几下即可完成。使用 DataPortal 智能标记,用户可在 Microsoft Word 或 Microsoft Outlook® 电子邮件中快速插入、显示或使用信息。DataPortal 使您的 Microsoft Office 成为访问您组织信息的门户:吸引人,智能程度高,协作性强,并且效率高。

3、Avery® Edition of ProWrite™
使您能够在 Outlook® 内创建标签。只需突出显示一个或多个您的联系人,然后从工具栏启动 ProWrite - Labels,并选择您要设置其格式的 Avery 产品,再在 Microsoft Word 内进行打印。就这么简单快捷!而且是免费的。提供的 Avery 产品超过 100 个,使用它们,您可以创建邮件和档案标签、徽章等等。试用 ProWrite 智能标记。

4、Worldlingo
允许通过此智能标记访问文本、电子邮件和网页翻译服务。获取报价和发送需要进行专业化翻译的文档。包含与特定国家数据有关的国际业务惯例的信息。

五、创造自己的“智能标签”

    重新申明一下,“智能标记”是一些附带有类型信息的文本字符串;当文档中出现符合条件的文本字符串时,该字符串就会被识别出来,然后用户可以执行适用于该字符串类型的操作。最典型的应用可以是:创建用于识别股票代码的“智能标记”,当用户键入包含四个字母的大写字符串时,就会显示一个与股票有关的操作(如在 Internet 上查找股票价格)的列表。
    Visual Studio Tools for Office 提供了一些可用来将智能标记快速添加到 Microsoft Office Word 文档和 Microsoft Office Excel 工作簿中的类。下面,我将为大家做一个简单的示例,为Excel 工作簿添加“智能标记”。分为以下7个步聚:
    1、创建新的 Excel 项目。
    2、通过“添加引用”对话框的“COM”选项卡添加对“Microsoft Smart Tags 2.0 类型库”的引用。
    3、向项目中添加类文件,并创建一个从 Microsoft.Office.Tools.Excel.SmartTag 继承的类。
    4、在新建的类中,创建智能标记的操作。操作是指显示在智能标记菜单中的项。通过向您的类的 Actions 集合中添加 Action 类型的实例,可以创建操作。
    5、重写 Recognize 方法以实现自己的自定义识别行为。您的 Recognize 实现必须调用 PersistTag 方法以使 Excel 能够识别该智能标记。
    6、创建事件处理程序以响应所创建操作的 Click 事件。
    7、在项目工作簿的代码文件中,向工作簿中的 VstoSmartTags 添加智能标记实例。

[ 本帖最后由 儒道佛 于 2010-5-25 19:37 编辑 ]

MYE_VSTO_EXCEL_SmartTag_2007.rar

70.56 KB, 下载次数: 168

评分

参与人数 1财富 +50 技术 +2 收起 理由
zhaogang1960 + 50 + 2 支持原创

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-24 21:26 | 显示全部楼层
六、编程步骤

【开发环境】
开发环境:Visual Studio 2010
应用环境:Microsoft Office 2007

1、创建新的 Excel 项目。
文件-->新建-->项目-->选择项目类型
Excel 2007 Add-in
项目名称设为:MYE_VSTO_EXCEL_SmartTag_2007

图一:创建项目
1-创建项目.png

2、通过“添加引用”对话框的“COM”选项卡添加对“Microsoft Smart Tags 2.0 类型库”的引用。
项目-->添加引用-->选择.net项-->选择引用
引用名称:Microsoft.Office.Interop.SmartTag(Version:12.0.0.0)
注:如果是针对2010的项目,改选为(Version:14.0.0.0),对应Office 2010

图二:创建项目
2-添加引用.png

3、向项目中添加类文件,并创建一个从 Microsoft.Office.Tools.Excel.SmartTag 继承的类。
项目-->添加“类”
类名:CustomSmartTag.cs

图三:添加类
3-创建类.png

代码一:CustomSmartTag.cs
using System;
using System.Windows.Forms;
using Microsoft.Office.Tools.Excel;
using Microsoft.Office.Interop.SmartTag;

namespace Trin_ExcelDerivedSmartTags
{
    public class CustomSmartTag : SmartTag
    {
        //TO DO
    }
}

4、在新建的类中,创建智能标记的操作。操作是指显示在智能标记菜单中的项。
在启动事件中,添加代码。

代码二:ThisAddIn.cs
        // Declare Actions for this SmartTag
        Action Action1 = new Action("Display property value");
        Action Action2 = new Action("Display smart tag details");

        public CustomSmartTag() : base("http://vsto.5d6d.com/#DemoSmartTag", "我的智能标签")
        {
            this.Terms.AddRange(new string[] { "潘淳", "陈国良","mye.cn" });
            Actions = new Action[] { Action1, Action2 };
            Action1.Click += new ActionClickEventHandler(Action1_Click);
            Action2.Click += new ActionClickEventHandler(Action2_Click);
        }

5、重写 Recognize 方法以实现自己的自定义识别行为。您的 Recognize 实现必须调用 PersistTag 方法以使 Excel 能够识别该智能标记。

代码三:CustomSmartTag .cs
        protected override void Recognize(string text, ISmartTagRecognizerSite site, ISmartTagTokenList tokenList)
        {
            // Determine whether each smart tag term exists in
            // the document text.
            foreach (string term in this.Terms)
            {
                // Search the cell text for the first instance of
                // the current smart tag term.
                int index = this.CellText.IndexOf(term, 0);

                if (index >= 0)
                {
                    // Create a smart tag token and a property bag for the
                    // recognized term.
                    ISmartTagProperties propertyBag = site.GetNewPropertyBag();

                    // Write a new property value.                 
                    string key = "Key1";
                    propertyBag.Write(key, DateTime.Now.ToString());

                    // Attach the smart tag to the term in the document
                    this.PersistTag(propertyBag);

                    // This implementation only finds the first instance
                    // of a smart tag term in the cell.
                    break;
                }
            }

6、创建事件处理程序以响应所创建操作的 Click 事件。

代码四:CustomSmartTag .cs
        // This action displays the property value for the term.
        private void Action1_Click(object sender, ActionEventArgs e)
        {
            ISmartTagProperties propertyBag = e.Properties;
            string key = "Key1";
            MessageBox.Show("The corresponding value of " + key + " is: " + propertyBag.get_Read(key));
        }

        // This action displays smart tag details.
        private void Action2_Click(object sender, ActionEventArgs e)
        {
            MessageBox.Show("The current smart tag caption is '" + this.Caption + "'. The current smart tag type is '" + this.SmartTagType + "'.");
        }

7、在项目工作簿的代码文件中,向工作簿中的 VstoSmartTags 添加智能标记实例。

代码五:CustomSmartTag .cs
        {
            //启动“智能标签/动作”
            Application.SmartTagRecognizers.Recognize = true;
            //与项目挂钩
            this.VstoSmartTags.Add(new CustomSmartTag().Base);
        }

顺例说一下,Smart Tag 是一个被忽视的重大功能,想像空间近乎无穷...

[ 本帖最后由 儒道佛 于 2010-5-25 12:45 编辑 ]

MYE_VSTO_EXCEL_SmartTag_2007.rar

70.56 KB, 下载次数: 83

评分

参与人数 1鲜花 +3 收起 理由
VBA万岁 + 3 感谢帮助

查看全部评分

TA的精华主题

TA的得分主题

发表于 2010-5-24 21:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-25 12:45 | 显示全部楼层
七、深入“智能标记”

1、“智能标记”的SmartTagBase
        智能标记是从抽象 SmartTagBase 类派生的任意类的实例,SmartTagBase 提供了两大属性,直接决写了智能标签的使用方法:
        【Terms属性】:只需要指定简单的字符串,并请将字符串添加到 Terms 属性中,上面的案例便是采取了这种单一的方式。
        【Expressions 属性】:可以实现复杂的字符串,支持该字符串的正则表达式形式,这点相当重要。
        Word 和 Excel 在用户键入字符串时将包含嵌入空格或组合了字母、数字和符号的字符串解析为分开的标记。例如,如果用户键入“sales report”,Word 和 Excel 会创建标记“sales”和“report”。类似地,如果用户键入“2005sales”,Word 和 Excel 会创建标记“2005”和“sales”。如果想让智能标记识别包含嵌入空格或组合了字母、数字和符号的字符串,则不要向 Terms 属性添加字符串。而是应该向 Expressions 属性添加说明该字符串的正则表达式,或者创建自己的用于搜索该字符串的识别器。

2、“智能标记”的Actions/动用
        【Actions 属性】:包含了用户选择该智能标记时执行的操作,充分展开你丰富的想像力吧,上述案例中便改变了当前单元格的颜色。
        【BeforeCaptionShow 事件】:BeforeCaptionShow 事件紧跟着用户单击智能标记图标之后、智能标记菜单显示之前引发。
        【Click 事件】:Click 事件在用户在智能标记菜单中选择操作的标题时引发。

3、“智能标记”的识别器
        比较用户输入与 Terms 和 Expressions 属性的内容的默认智能标记识别器。可以从 SmartTagBase、Microsoft.Office.Tools.Word.SmartTag 或 Microsoft.Office.Tools.Excel.SmartTag 派生一个新类,并重写 Recognize 方法。见上述案例中的Recognize方法实现部分。

4、存储和检索属性包中的数据
        可以处理 Microsoft.Office.Tools.Word.Action 或 Microsoft.Office.Tools.Excel.Action 类的 Click 或 BeforeCaptionShow 事件。这些事件的处理程序接收 Microsoft.Office.Tools.Word.ActionEventArgs 或 Microsoft.Office.Tools.Excel.ActionEventArgs。这些类有类型为 ISmartTagProperties 的 Properties 属性,可以用来读写智能标记的属性包。当向项目添加对 Microsoft Smart Tags 2.0 类型库的引用时,ISmartTagProperties 接口可用。一般而言可将正则表达式分配给 Visual Studio Tools for Office 智能标记时,默认的识别器会将从正则表达式捕获的每个组的键/值对添加到智能标记属性包。

EXCEL本身是不支持正则表达式的,如果将正则表达式与智能标记组合使用,可以发挥出无穷无尽的想像力~~
未完待续...

TA的精华主题

TA的得分主题

发表于 2010-7-5 20:49 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-5 21:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-13 22:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-26 19:15 | 显示全部楼层
好帖,先顶起来

要花时间好好研究一下,对于Office的功能扩展一直有兴趣,还望楼主继续。

TA的精华主题

TA的得分主题

发表于 2010-12-22 04:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-22 11:10 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2019-8-25 03:12 , Processed in 0.092276 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表