設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

12下一頁
返回列表 發(fā)新帖
查看: 11760|回復: 10
打印 上一主題 下一主題

【原創(chuàng)]】EXCEL 2010的一個倒退,暨“智能標簽”在新版本中的變化

[復制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-2-21 14:09:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 faunus 于 2014-2-21 14:27 編輯

EXCEL 2010的一個倒退,暨“智能標簽”在新版本中的變化


【目錄】
1、什么是“智能標簽”
2、“智能標簽”的實現(xiàn)原理
3、“智能標簽”在office2010、2013中的重大變化
4、可選擇的“智能標簽”
5、創(chuàng)造自己的“智能標簽”
6、編程步驟
7、深入“智能標記”



【代碼下載】
-------------------------------






本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
 樓主| 發(fā)表于 2014-2-21 14:10:21 | 只看該作者
本帖最后由 faunus 于 2014-2-21 14:11 編輯

一、什么是“智能標簽”

    先看看“智能標簽”在WIKI上的定義:“智能標簽”,英文稱為Smart Tag,是一種在 Microsoft Word 97 開始出現(xiàn)的一種協(xié)助工具,它會在特定的區(qū)塊中顯示一個小符號(大多數(shù)為 "!" 的小圖標),當用戶將鼠標指針移上去時,可以看到一個快顯菜單 (Context Menu),方便用戶可以運行特定工作,目前已廣泛使用在 Microsoft Office 與 Internet Explorer 產(chǎn)品,而 Visual Studio 2005 開始,也在設計工具中激活了智能標簽的支持。
3#
 樓主| 發(fā)表于 2014-2-21 14:10:37 | 只看該作者
二、“智能標簽”的實現(xiàn)原理

    Smart Tag 是由 Microsoft Office 中的 “Microsoft Office Smart Tag Library”(MOSTL) 庫開放的一組 API 所開發(fā)出來的,它使用了以下兩個主要的接口:
1、ISmartTagRecognizer接口:
描述來自 Microsoft Office 文件中的特定文字,當指定的文字出現(xiàn)時,即會引導對應的 ISmartTagAction 接口中的方法。
2、ISmartTagAction接口:
接收來自于 ISmartTagRecognizer 的指令,以運行特定的動作。
    MOSTL 是一種支持 COM Automation 的接口組件,可以利用像 Visual Basic 6.0 或 C/C++ 或 .NET 編程語言(C# 或 VB.NET)來開發(fā)自定義的“智能標簽”。
4#
 樓主| 發(fā)表于 2014-2-21 14:11:02 | 只看該作者
三、“智能標簽”在office2010中的重大變化

    智能標簽長期以來一直為廣大office愛好者忽略,只有少量的“智能標簽”被使用,大多數(shù)人甚至不知道“智能標簽”是什么。許多智能標簽依賴于特定的系統(tǒng)存在,特別是Outlook。標簽也將會影響到系統(tǒng)的性能,尤其是在Word系統(tǒng)中,所以默認情況下,“智能標簽”是關閉的。隨著計算機的運行速度越快,有更多的內(nèi)存,性能問題已緩和。所以在現(xiàn)如今,無論你的系統(tǒng),甚至是在Word中,“智能標簽”都是值得體驗的,雖然他們有局限性,并沒被微軟在office 2007之前的8年中一直沒有大的變動。
    然而“智能標簽”在office 2010中發(fā)生了重大變化,尤其是體現(xiàn)在Excel 2010中。首先在2010版的Office中,“智能標簽/Smart Tag“的稱呼發(fā)生的變化,現(xiàn)在稱之為“動作/Action”。重點是在操作上,office 2010 比之 office 2007及以前的版本有了巨大的變化,具體分為以下四種情況:
    【W(wǎng)ord 2007及以前】:當有一些文字被檢測合格時,出現(xiàn)一個小圖標以及紫色虛線標示。
    【W(wǎng)ord 2010】:小圖標和紫線已消失,取而代之的是你必須用鼠標右鍵單擊,以選擇更多的行動。
    【Excel 2007及以前】:當有一些文字被匹配時,出現(xiàn)一個小圖標或強調(diào)+小圖標。
    【Excel 2010】:小圖標和強調(diào)均己被消失,取而代之的是你必須用鼠標右鍵單擊,以選擇更多的行動,以下以Excel為例:


    Excel2007的圖示如下:
   


  Excel2010的圖示如下:
   

    在Office 2010“智能標簽/動作”不再突出,沒有強調(diào)或圖標,而是必須用鼠標右鍵單擊選擇其他選項,以查看有什么可用的,這便是嚴重的倒退!

5#
 樓主| 發(fā)表于 2014-2-21 14:12:13 | 只看該作者
四、可選擇的“智能標簽”

1、ctiveDocs™
提供智能標記解決方案,以便您創(chuàng)建自己的 Microsoft Word 智能標記,不必離開文檔即可訪問所需的信息。您還可以連接到外部數(shù)據(jù)源,以節(jié)省大量時間并提高工作效率 - 不必進行任何編程!

2、DataPortal™
智能標記加載項使 Office 用戶能夠輕松創(chuàng)建并共享智能標記。使用 DataPortal 向?qū)?chuàng)建鏈接到任何企業(yè)數(shù)據(jù)庫的智能標記的過程不太復雜,單擊幾下即可完成。使用 DataPortal 智能標記,用戶可在 Microsoft Word 或 Microsoft Outlook® 電子郵件中快速插入、顯示或使用信息。DataPortal 使您的 Microsoft Office 成為訪問您組織信息的門戶:吸引人,智能程度高,協(xié)作性強,并且效率高。

3、Avery® Edition of ProWrite™
使您能夠在 Outlook® 內(nèi)創(chuàng)建標簽。只需突出顯示一個或多個您的聯(lián)系人,然后從工具欄啟動 ProWrite - Labels,并選擇您要設置其格式的 Avery 產(chǎn)品,再在 Microsoft Word 內(nèi)進行打印。就這么簡單快捷!而且是免費的。提供的 Avery 產(chǎn)品超過 100 個,使用它們,您可以創(chuàng)建郵件和檔案標簽、徽章等等。試用 ProWrite 智能標記。

4、Worldlingo
允許通過此智能標記訪問文本、電子郵件和網(wǎng)頁翻譯服務。獲取報價和發(fā)送需要進行專業(yè)化翻譯的文檔。包含與特定國家數(shù)據(jù)有關的國際業(yè)務慣例的信息。

6#
 樓主| 發(fā)表于 2014-2-21 14:12:26 | 只看該作者
五、創(chuàng)造自己的“智能標簽”

    重新申明一下,“智能標記”是一些附帶有類型信息的文本字符串;當文檔中出現(xiàn)符合條件的文本字符串時,該字符串就會被識別出來,然后用戶可以執(zhí)行適用于該字符串類型的操作。最典型的應用可以是:創(chuàng)建用于識別股票代碼的“智能標記”,當用戶鍵入包含四個字母的大寫字符串時,就會顯示一個與股票有關的操作(如在 Internet 上查找股票價格)的列表。
    Visual Studio Tools for Office 提供了一些可用來將智能標記快速添加到 Microsoft Office Word 文檔和 Microsoft Office Excel 工作簿中的類。下面,我將為大家做一個簡單的示例,為Excel 工作簿添加“智能標記”。分為以下7個步聚:
    1、創(chuàng)建新的 Excel 項目。
    2、通過“添加引用”對話框的“COM”選項卡添加對“Microsoft Smart Tags 2.0 類型庫”的引用。
    3、向項目中添加類文件,并創(chuàng)建一個從 Microsoft.Office.Tools.Excel.SmartTag 繼承的類。
    4、在新建的類中,創(chuàng)建智能標記的操作。操作是指顯示在智能標記菜單中的項。通過向您的類的 Actions 集合中添加 Action 類型的實例,可以創(chuàng)建操作。
    5、重寫 Recognize 方法以實現(xiàn)自己的自定義識別行為。您的 Recognize 實現(xiàn)必須調(diào)用 PersistTag 方法以使 Excel 能夠識別該智能標記。
    6、創(chuàng)建事件處理程序以響應所創(chuàng)建操作的 Click 事件。
    7、在項目工作簿的代碼文件中,向工作簿中的 VstoSmartTags 添加智能標記實例。
7#
 樓主| 發(fā)表于 2014-2-21 14:13:40 | 只看該作者
六、編程步驟-1

【開發(fā)環(huán)境】
開發(fā)環(huán)境:Visual Studio 2010
應用環(huán)境:Microsoft Office 2007

1、創(chuàng)建新的 Excel 項目。
文件-->新建-->項目-->選擇項目類型
Excel 2007 Add-in
項目名稱設為:MYE_VSTO_EXCEL_SmartTag_2007

圖一:創(chuàng)建項目


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

圖二:創(chuàng)建項目


3、向項目中添加類文件,并創(chuàng)建一個從 Microsoft.Office.Tools.Excel.SmartTag 繼承的類。
項目-->添加“類”
類名:CustomSmartTag.cs

圖三:添加類




點擊這里給我發(fā)消息

8#
發(fā)表于 2014-2-21 14:13:41 | 只看該作者
感謝版主,辛苦了!
9#
 樓主| 發(fā)表于 2014-2-21 14:14:07 | 只看該作者
六、編程步驟-2


代碼一: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、在新建的類中,創(chuàng)建智能標記的操作。操作是指顯示在智能標記菜單中的項。
在啟動事件中,添加代碼。

代碼二: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 方法以實現(xiàn)自己的自定義識別行為。您的 Recognize 實現(xiàn)必須調(diào)用 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、創(chuàng)建事件處理程序以響應所創(chuàng)建操作的 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 是一個被忽視的重大功能,想像空間近乎無窮...
10#
 樓主| 發(fā)表于 2014-2-21 14:14:33 | 只看該作者
本帖最后由 faunus 于 2014-2-21 14:28 編輯

七、深入“智能標記”

1、“智能標記”的SmartTagBase
        智能標記是從抽象 SmartTagBase 類派生的任意類的實例,SmartTagBase 提供了兩大屬性,直接決寫了智能標簽的使用方法:
        【Terms屬性】:只需要指定簡單的字符串,并請將字符串添加到 Terms 屬性中,上面的案例便是采取了這種單一的方式。
        【Expressions 屬性】:可以實現(xiàn)復雜的字符串,支持該字符串的正則表達式形式,這點相當重要。
        Word 和 Excel 在用戶鍵入字符串時將包含嵌入空格或組合了字母、數(shù)字和符號的字符串解析為分開的標記。例如,如果用戶鍵入“sales report”,Word 和 Excel 會創(chuàng)建標記“sales”和“report”。類似地,如果用戶鍵入“2005sales”,Word 和 Excel 會創(chuàng)建標記“2005”和“sales”。如果想讓智能標記識別包含嵌入空格或組合了字母、數(shù)字和符號的字符串,則不要向 Terms 屬性添加字符串。而是應該向 Expressions 屬性添加說明該字符串的正則表達式,或者創(chuàng)建自己的用于搜索該字符串的識別器。

2、“智能標記”的Actions/動用
        【Actions 屬性】:包含了用戶選擇該智能標記時執(zhí)行的操作,充分展開你豐富的想像力吧,上述案例中便改變了當前單元格的顏色。
        【BeforeCaptionShow 事件】:BeforeCaptionShow 事件緊跟著用戶單擊智能標記圖標之后、智能標記菜單顯示之前引發(fā)。
        【Click 事件】:Click 事件在用戶在智能標記菜單中選擇操作的標題時引發(fā)。

3、“智能標記”的識別器
        比較用戶輸入與 Terms 和 Expressions 屬性的內(nèi)容的默認智能標記識別器?梢詮 SmartTagBase、Microsoft.Office.Tools.Word.SmartTag 或 Microsoft.Office.Tools.Excel.SmartTag 派生一個新類,并重寫 Recognize 方法。見上述案例中的Recognize方法實現(xiàn)部分。

4、存儲和檢索屬性包中的數(shù)據(jù)
        可以處理 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本身是不支持正則表達式的,如果將正則表達式與智能標記組合使用,
可以發(fā)揮出無窮無盡的想像力~~

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-17 06:09 , Processed in 0.183472 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表