标签: add-in

尝试创建ssms加载项的问题

我正在尝试为SSMS 2008和/或2008 R2创建一个加载项,但我马上就遇到了问题.

我可以让我的加载项工作,并在SSMS启动时让它只显示一个消息框.

但是,在下载各种代码示例后,在尝试引用Microsoft.SqlServer.Management.UI.VSIntegration.ServiceCache时,我得到一个空引用异常:

Commands2 commands = (Commands2)ServiceCache.ExtensibilityModel.Commands;
Run Code Online (Sandbox Code Playgroud)

我在使用SSMS 2008或SSMS 2008 R2时遇到此问题.我正在研究Visual Studio 2010.

这有点令人沮丧,因为我渴望了解更多有关SSMS加载项的知识,但似乎无法通过那里的少量样本.

任何建议/提示赞赏.

谢谢

.net add-in ssms

3
推荐指数
1
解决办法
2433
查看次数

多个按钮的 CommandBarButton 单击事件

我需要在 Visio 窗口中使用一组按钮创建自己的工具栏。下一个代码生成工具栏(有效),创建按钮(有效),并为它们分配 Click 事件处理程序。

vsoCommandBar = vsoCommandBars.Add("MyCommandBat", Office.MsoBarPosition.msoBarTop, false, true);

var vsoButtonX1 = (Office.CommandBarButton)vsoCommandBar.Controls.Add(
    Office.MsoControlType.msoControlButton, 1, 2, 1, false);
vsoButtonX1.Caption = "Test1";
vsoButtonX1.Tag = "";
vsoButtonX1.Click += GlobalEvents.btnTestClick;

var vsoButtonX2 = (Office.CommandBarButton)vsoCommandBar.Controls.Add(
    Office.MsoControlType.msoControlButton, 1, 2, 2, false);
vsoButtonX2.Caption = "Test2";
vsoButtonX2.Tag = "";
vsoButtonX2.Click += GlobalEvents.btnTest2Click;
Run Code Online (Sandbox Code Playgroud)

处理程序很简单,但不同(当然)。

public void btnTestClick(Office.CommandBarButton vsoButton, ref bool cancelDefault)
{
    MessageBox.Show("btnTestClick!");
}

public void btnTest2Click(Office.CommandBarButton vsoButton, ref bool cancelDefault)
{
    MessageBox.Show("btnTest2Click!");
}
Run Code Online (Sandbox Code Playgroud)

当我单击任何按钮时,我会看到带有“btnTestClick!”的对话框。并在按下带有“btnTest2Click!”的“确定”对话框后。在两个按钮中的任何一个上。

此外,如果我跳过这一行:

vsoButtonX2.Click += GlobalEvents.btnTest2Click;
Run Code Online (Sandbox Code Playgroud)

我会看到单个对话框“btnTestClick!” 在任何按钮上。

至少对于命令栏,它似乎只有一个单击处理器。是真的吗?!

PS:当然,我可以使用“vsoButton”参数和标签来检测按钮被按下,但使用不同的事件处理程序似乎更方便......这可能吗?

c# vsto visio add-in

3
推荐指数
1
解决办法
1649
查看次数

为什么 Microsoft Word 会为已打开的文档触发 DocumentOpen 事件

我有一个使用 VSTO 和互操作的 Microsoft Word 插件。如果DocumentOpen为已经打开的文档触发事件,我的代码就会出现问题。我已经能够通过打开文档 doc1、打开另一个文档 doc2,然后再次尝试打开 doc1 来一致地复制这一点。

Doc1 显然已经打开,但再次为 doc1 触发 DocumentOpen 事件。这是一个预期的设计,如果是,是否有一种简单的方法可以判断是否正在为已打开的文档触发事件?

private void ThisAddIn_Startup(object sender, System.EventArgs a)
{
  try
  {
    this.Application.DocumentOpen += 
      new MSWord.ApplicationEvents4_DocumentOpenEventHandler(Application_DocumentOpen);

  }
}

private void Application_DocumentOpen(MSWord.Document document)
{
  HandleOpenedDocument(document);
}
Run Code Online (Sandbox Code Playgroud)

c# vsto add-in office-interop

3
推荐指数
1
解决办法
4533
查看次数

添加安装并引用

我想检查插件是否已安装并被引用。下面的代码检查插件是否安装。我如何检查它是否在 excel 中被引用。

引用我的意思是工具> 插件> 插件对话框> 如果插件已安装> 检查是否选中了具有特定名称的插件。

我希望最好没有任何循环。

Sub Demo() 
    Dim b As Boolean 
    b = CheckAddin("Solver add-in") 
    MsgBox "Solver is " & IIf(b, "", "not ") & "installed" 
End Sub 

Function CheckAddin(s As String) As Boolean 
    Dim x As Variant 
    On Error Resume Next 
    x = AddIns(s).Installed 
    On Error Goto 0 
    If IsEmpty(x) Then 
        CheckAddin = False 
    Else 
        CheckAddin = True 
    End If 
End Function 
Run Code Online (Sandbox Code Playgroud)

excel vba add-in

3
推荐指数
1
解决办法
6925
查看次数

如何拦截单击内置的Office功能区控件

我想知道是否有可能检测到用户何时单击了Excel中的页眉/页脚按钮,这样我就可以在我的加载项选项卡上显示一些自定义页眉/页脚相关的功能区控件,并在用户不在页眉中时隐藏它们/页脚编辑模式.

是否有可能以某种方式劫持此按钮?我见过应用程序劫持了Excel Save.我正在寻找与页眉/页脚按钮类似的行为.

我正在使用C#,Visual Studio 2012和Excel 2010.我使用Ribbon XML方法创建了自定义功能区.

c# excel add-in excel-addins

3
推荐指数
1
解决办法
2540
查看次数

在 Power Point 互操作中用颜色填充形状

当我运行下面的代码时,我想在我的形状中填充 (255,168,0) 颜色,它会给我一个浅一点的蓝色。

   private void Shape_fill_Click(object sender, RibbonControlEventArgs e)
    {
        Color_palette.Visible = true;
         type = "Fill";           
    }

    private void btn_Orange_Click(object sender, RibbonControlEventArgs e)
    {
        if(type=="Fill")
        { 
        PowerPoint.Application ppApp = Globals.ThisAddIn.Application;
        PowerPoint.ShapeRange ppshr = ppApp.ActiveWindow.Selection.ShapeRange;
        ppshr.Fill.ForeColor.RGB = System.Drawing.Color.FromArgb(255,168,0).ToArgb(); 
        }
Run Code Online (Sandbox Code Playgroud)

问题:除了浅蓝色之外,如何获得不同或变化的颜色?

c# add-in visual-studio-addins visual-studio-2013 powerpoint-2013

3
推荐指数
1
解决办法
4123
查看次数

使用注册表检测安装的 MS Office 是 32 位还是 64 位

我想安装基于excel版本(32位或64位)的vsto插件。我计划捆绑 32 位和 64 位 msis 并通过确定 excel 版本来安装一个。我可以找到这个链接,通过使用注册表来检测 2010 office 是 32 位还是 64 位。 通过注册表检测 Office 是 32 位还是 64 位 但我想检查 excel 2007 和 2013 是 32 位还是 64 位。是否可以通过注册表检测它们。

registry vsto add-in wix ms-office

3
推荐指数
1
解决办法
7263
查看次数

使用注册表安装 Excel 插件

我创建了一个名为的 excel 加载项

项目计数_每人.xlam

当我打开 excel 并转到 Development>AddIns 并选择我的 AddIn 进行安装时,如果我在保存后关闭 excel,它也不会保持安装状态。我制作的插件在“插件”选项卡下创建了一个新的 MenuBarButton

所以我创建了一个新的注册表项来在启动时安装插件

HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\ProjectCount_PerPerson

钥匙看起来像这样

(Default)     REG_SZ        (value not set)
Description   REG_SZ        Project Count_Per Person
FriendlyName  REG_SZ        Project Count_Per Person
LoadBehavior  DWORD         0x00000003 (3)
Manifest      REG_SZ        C:\Users\b012918\AppData\Roaming\Microsoft\AddIns\Project Count_Per Person.xlam
Run Code Online (Sandbox Code Playgroud)

当我启动 Excel 时,它显示它正在安装 AddIn,但随后我得到一个

异常读取清单来自

file:///C:/Users/b012918/AppData/Roaming/Microsoft/AddIns/Project%Count_Per%Person.xlam:

清单可能无效或无法打开文件。

http://pastebin.com/bN1datV5

任何对我搞砸的事情的见解都会有所帮助。

附加信息:

如果在我启动 excel 时卸载了插件,则会出现清单错误。如果在我启动 excel 时“检查”了插件,它会在下面的评论中给出下载错误。即使之前安装了插件,CommandBarButton 也不会留在原位。此外,在选项--> 插件下,插件被声明为“活动”。

registry excel add-in load

3
推荐指数
1
解决办法
6976
查看次数

是否可以在 Outlook Web 加载项应用程序中获取多个选定邮件的数据?

在 Outlook COM 加载项 (C#) 中,我能够像这样在 Outlook 中检索所有选定的邮件

var selection = Globals.ThisAddIn.Application.ActiveExplorer().Selection;
List<Outlook.MailItem> outlookMailList = new List<Outlook.MailItem>();
foreach (object mail in selection)
  outlookMailList.Add((Outlook.MailItem)mail);
Run Code Online (Sandbox Code Playgroud)

将选定的邮件与一些元数据存储在 DMS 中。

现在我想用 Javascript API for Office (office.js) 做同样的事情。

  1. 这里的正确入口点是什么?因为当我在 Outlook 中选择多封邮件时,默认功能区中的 OutlookTab 按钮将被停用。

另见http://bettersolutions.com/javascript-api/hosts/extensionpoint.htm

  1. 为了检索我找到的邮件信息

selectedMail = Office.context.mailbox.item;
Run Code Online (Sandbox Code Playgroud)

我现在如何获取 Outlook 中所有标记邮件的数据。我希望有类似的东西

selectedMails = Office.context.mailbox.items;
// OR
selectedMails = Office.context.mailbox.selectedItems;
Run Code Online (Sandbox Code Playgroud)

有人知道如何检索哪些邮件被选择到 TaskPane 或 CustomPane 的信息吗?分别是否有可能?非常感谢。

outlook add-in outlook-addin javascript-api-for-office office-js

3
推荐指数
1
解决办法
1168
查看次数

Microsoft Word 中的 SaveCopyAs 行为

众所周知,Word 不像 PowerPoint 或 Excel 那样提供 SaveCopyAs。我尝试了不同的方法,但没有令人满意的结果。

我可以使用正确的格式(元素定位 -> wdPasteDefault)或正确的样式(字体和颜色 -> wdPasteDefault)即时复制文档。

如果用户关闭原始文档,则必须询问他是否应保存文档并选择路径。

目前我已经在 Word 2016 上尝试了不同的方法。最后我想支持 2010 到 2016。

一种方法是:

        object wdWhat = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage;
        object wdWhich = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute;

        Microsoft.Office.Interop.Word.Range range = document.Range(ref missObj, ref missObj);
        Microsoft.Office.Interop.Word.Range pageRange = document.Range(ref missObj, ref missObj);

        pageRange.Start = range.GoTo(ref wdWhat, ref wdWhich, ref missObj, ref missObj).Start;
        pageRange.End = document.Range(ref missObj, ref missObj).End;
        pageRange.Copy();

        Microsoft.Office.Interop.Word.Document newDoc = AddinModule.CurrentInstance.WordApp.Documents.Add(ref missObj, ref missObj, ref missObj, ref missObj);

        newDoc.PageSetup.PageWidth = document.PageSetup.PageWidth;
        newDoc.PageSetup.PageHeight = document.PageSetup.PageHeight;
        AddinModule.CurrentInstance.WordApp.Selection.PasteAndFormat(Microsoft.Office.Interop.Word.WdRecoveryType.wdPasteDefault);

        object newDocName …
Run Code Online (Sandbox Code Playgroud)

c# com add-in ms-word office-interop

3
推荐指数
1
解决办法
638
查看次数