如何在word应用程序中查找插件列表

问题描述 投票:0回答:2

我创建了一个办公室:使用Visual Studio工具办公室(VSTO)的文字加载项。我已将加载项的loadehavior修改为'0'以停止其自动加载行为。

我的要求是从c#应用程序启动word文档,并仅为此word实例启用加载项。

Using Word = Microsoft.Office.Interop.Word;

{
  Word.Application wordApp;

  //Instantiate a word application
  wordApp = new Word.Application();
  wordApp.visible = true;

  // Open a document
  wordApp.Documents.Open(ref wordFile, ref Missing.value, ..... etc );  

  foreach (Word.AddIns addins in wordApp.Application.AddIns)
       MessageBox.Show(addins.ToString());
}

for循环抛出异常:

Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Word.AddIn'  

*如何获取/存储/迭代插件列表/ COMaddins *

问候,

c# vsto add-in
2个回答
0
投票

因为我们所有人都知道应用程序级加载项适用于特定应用程序的所有实例。我成功地为Office 2007的特定应用程序实例启用了应用程序级加载项 - Word和Excel。例如,如果我从c#应用程序启动一个单词实例,我的应用程序级别加载项(自定义功能区功能)将仅适用于该实例,手动启动的所有其他实例的行为将是正常的。

每个应用程序级别的加载项都在注册表中注册。因此,应用程序的每个实例都会尝试加载加载项。因此,主要工作在于加载色带。

在运行时,您必须决定是否加载自定义功能区或基本功能区。

为了这, - >在c#应用程序中创建一个特定于流程的环境变量,您可以在其中实例化您的办公应用程序(word / excel)。

System.Environment.SetEnvironmentVariable("MyVar", "1", EnvironmentVariableTarget.Process);  

- >检查加载项的功能区类中的变量。如果变量存在则加载自定义功能区,否则加载基本功能区。

public string GetCustomUI(string ribbonID)
{
   if (System.Environment.GetEnvironmentVariable("MyVar", EnvironmentVariableTarget.Process) == "1")
   {
        return GetResourceText("ExcelAddIn.ExcelRibbon.xml");
   }
   else
   {
        return GetResourceText("ExcelAddIn.BasicRibbon.xml");
   }
}

你差不多完成了!但是Windows不允许你一次维护word / excel的两个实例(.exes)。因此,每个单词/ excel实例将从相同的.EXE打开,并且您的加载项将应用于所有实例。因此,将单词/ excel的每个实例(.exe)分开。

有注册表黑客来实现这个目标: 在关键,

HKEY_CLASSES_ROOT\Word.Document.12\shell\Open\Command

将“%1”附加到默认键值并重命名命令键。 在关键,

HKEY_CLASSES_ROOT\Word.Document.12\shell\Open

重命名ddeexec键。

问候,


0
投票

最后我找到了解决问题的方法:

// This will return all the word addins
Microsoft.Office.Core.COMAddIns comAddins = wordApp.COMAddIns;

// Iterate through all the addins 
for(Microsoft.Office.Core.COMAddIns addins in wordApp.COMAddIns)
     MessageBox.Show(addin.Description);
© www.soinside.com 2019 - 2024. All rights reserved.