[英]How can we create a MS WORD Add-in ribbon uisng Open XML SDK for Office
在MS WORD
一個VSTO項目中,我使用VS2017 - Update 1809
為WORD 2010-2016
創建了一個自定義 Office 功能區 - 帶有一個按鈕,如下所示。 問題:如何在類似的VS2017 - Open XML for Office項目中使用Open XML SDK 2.5 for Office實現完全相同的效果? 我在網上沒有找到這樣的例子:
VSTO 示例中的功能區:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns" label="my Ribbon Tab">
<group id="ContentGroup" label="Content">
<button id="textButton" label="Insert Text" screentip="Text" onAction="OnTextButton"
supertip="Inserts text at the cursor location."/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
上述功能區中按鈕的回調方法:
public void OnTextButton(Office.IRibbonControl control)
{
Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
currentRange.Text = "This text was added by the Ribbon.";
}
更新:
動機:我為 MS WORD 創建了一個 VSTO 加載項,它在 WORD 文檔的頂部功能區中創建了一個自定義選項卡。 該選項卡有多個控件(按鈕、復選框等),它們通過各自的回調執行各種操作(類似於我上面的帖子中顯示的示例)。 我想轉換是VSTO加載項為Office做同樣的使用Open XML SDK,因為VSTO外接程序不能被發布到Microsoft Stores
的解釋在這里。 並且新的 office 插件功能不支持我的舊 VSTO 插件所支持的某些功能。
不幸的是,您的想象是不可能的。
按照設計,Ribbon XML 鏈接到同一“容器”中的代碼。 存儲在 Office 文檔中的功能區 XML必須與同一文檔的 VBA 代碼中的回調一起使用。 如果要使用 Office Open XML 將 Ribbon XML 插入 Word 文檔,則它使用的代碼必須位於同一文檔的 VBA 組件中。 (還值得注意的是,VBA 組件不是 XML 格式,而是二進制格式,因此無法使用 Open XML 生成 - 只能導入。)
出於同樣的原因,由 COM 加載項(基於 IDTExtensibility2,無論是 VSTO 還是任何其他 COM 加載項)加載的 Ribbon XML 必須與該加載項中的代碼一起使用。 Ribbon 的回調不能在任何其他“容器”中,盡管回調代碼可以調用“容器”之外的代碼。 (注意 VSTO 功能區不能被 VBA 代碼調用......並且功能區不存儲在任何文檔中。)
使用 VBA 和 COM 加載項中的 Ribbon XML,可以通過為它們分配Q
id 來共享Ribbon 控件。 對於共享控件,只要知道 id,任何容器中的代碼都可以引用它們。
Office JS 加載項中定義的功能區也依賴於同一容器內的代碼。 但是,Office JS 模型(還沒有?)支持共享控件的概念。
結論:與 COM 對象模型相比,Office JS 加載項仍然非常有限,無論是 Office 應用程序的對象模型還是功能區(Office JS 術語中的“命令”)。 該功能正在穩步擴展,最近重點是 Excel。 其他事情(希望)會隨之而來。
如果有一個特定的功能應該 - 在您看來 - 具有非常高的優先級,您應該轉到 UserVoice 進行 Office 開發。 如果已經提出請求,請對其進行投票。 如果找不到,請創建一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.