标签: add-in

通过打开文件启动Excel时,不会加载Excel的COM加载项

一些用户报告说,如果他们通过双击Excel文件启动Excel,则加载项将不会加载.但是,如果他们通过"开始"菜单(或"快速启动"工具栏)打开Excel,则加载项可以正常加载.

一些细节,以防他们帮助:

  • 它是一个用VB6编写的COM加载项.
  • 在Windows XP/Excel 2003和Vista/Excel 2007系统上已报告此问题.
  • 加载项实现IDTExtensibility2.
  • 启动模式设置为"启动时加载".

任何有关原因的想法或如何解决这个问题将不胜感激.

更新:我相信我找到了解决这个问题的方法.

当注册IDTExtensibility2 dll时,它会自动为加载行为,加载项名称等创建HKCU条目.但是我也让我的安装文件注册了HKLM的加载项,以便所有用户都可以使用它.机.这导致系统上的双重注册表项.

我不认为这会是问题的原因.我手动编辑了HKCU条目,Excel似乎忽略了它们并遵循HKLM条目.但是,我收到另一位开发人员的提示,解释他们遇到了同样的问题,他们的解决方案是删除重复的注册表项.我试过了,似乎已经解决了报告这个bug的(极少数)人的问题.

下面的Inno设置代码将添加HKLM条目,仔细检查加载行为是否正确(因为我是偏执狂),然后删除HKCU条目.在您看到所有大写字母的任何地方替换您的文件属性.

[Registry]
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: FriendlyName; ValueData: ADDIN_NAME
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: Description; ValueData: ADDIN_DESC
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: LoadBehavior; ValueData: 3
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: CommandLineSafe; ValueData: 0


// Set load behavior to on start up
procedure ResetAddinRegKeys();
var
  bUpdate : Boolean;
  LoadBehaviorKey : Cardinal;

begin …
Run Code Online (Sandbox Code Playgroud)

vb6 com excel add-in

10
推荐指数
1
解决办法
5万
查看次数

如何在成功构建完成后获得通知?

我正在编写一个VS加载项,我需要在成功构建后运行某个方法.我尝试过使用dte.Events.BuildEvents.OnBuildDone但即使构建失败也会发生这种情况.

我应该使用房产或其他活动吗?

add-in build visual-studio envdte

10
推荐指数
2
解决办法
2636
查看次数

在Visual C#2010中获取DTE2对象的引用

我想在Visual Studio 2010中使用带有C#的DTE2对象来获得对当前解决方案的引用.

我首先尝试了以下代码:

var dte = Marshal.GetActiveObject("VisualStudio.DTE.10.0") as EnvDTE80.DTE2;
Run Code Online (Sandbox Code Playgroud)

但是当我打开2个解决方案,并且这个代码在第一个解决方案中时,我得不到对当前解决方案的引用,而是对我加载的最后一个解决方案的引用.我需要当前的解决方案......

在互联网上搜索,我发现以下解决方案如何从VSPackage获取当前的解决方案目录?:

// Get an instance of the currently running Visual Studio IDE
DTE dte = (DTE)GetService(typeof(DTE));
Run Code Online (Sandbox Code Playgroud)

但是当我使用它时,我的dte对象总是为NULL.

那么如何使用C#on .net framework 4.0获取VS2010中当前的解决方案对象?

c# add-in visual-studio-2010 envdte

10
推荐指数
2
解决办法
8833
查看次数

在运行时搜索对象中的值[QuickWatch增强]

有时我浪费时间在运行时在对象中搜索值.
当然你 - 都知道这个任务 - >打开QuickWatch视图并浏览属性,直到找到你要找的东西.

我正在寻找一个工具/加载项/扩展,可以在对象中搜索值.
带有搜索增强功能的QuickWatch视图将是perferct :)

SB.知道一个工具?

谢谢!

.net c# debugging add-in

10
推荐指数
1
解决办法
3036
查看次数

迭代未注册的加载项(.xla)

我需要帮助

  • 弄清楚如何使用菜单路径迭代尚未在Excel中注册的当前打开的Excel加载项文件(.xla)Tools > Add-ins.
  • 更具体地说,我对任何未出现在加载项对话框中的工作簿感兴趣,但有ThisWorkbook.IsAddin = True.

证明问题:

尝试按如下方式遍历工作簿不会使工作簿具有.AddIn = True:

Dim book As Excel.Workbook

For Each book In Application.Workbooks
    Debug.Print book.Name
Next book
Run Code Online (Sandbox Code Playgroud)

通过加载项循环不会获得未注册的加载项:

Dim addin As Excel.AddIn

For Each addin In Application.AddIns
    Debug.Print addin.Name
Next addin
Run Code Online (Sandbox Code Playgroud)

循环通过VBProjects集合可以正常工作,但前提是用户在宏安全设置中具有对Visual Basic项目的特别可信访问权限 - 这很少:

Dim vbproj As Object

For Each vbproj In Application.VBE.VBProjects
    Debug.Print vbproj.Filename
Next vbproj
Run Code Online (Sandbox Code Playgroud)

但是,如果已知工作簿的名称,则无论是否为加载项,都可以直接引用工作簿:

Dim book As Excel.Workbook
Set book = Application.Workbooks("add-in.xla")
Run Code Online (Sandbox Code Playgroud)

但是,如果名称未知,那么如何获取对此工作簿的引用,并且不能依赖用户的宏安全设置?

excel vba add-in excel-vba excel-addins

9
推荐指数
1
解决办法
3923
查看次数

带有无缝撤消的Excel加载项:可能吗?

我正在考虑使用COM(而不是 VBA)实现Excel加载项,它将操作工作表中的数据.

我将需要这个加载项与Undo堆栈无缝集成.进一步来说:

  1. 此加载项对数据所做的任何更改都需要用户撤消(通过标准的撤消操作)
  2. 需要保留在加载项操作发生之前撤消堆栈上的项目

到目前为止,在我的(尽管是敷衍的)研究中,目前还不清楚Excel是否可以允许这样做.如果没有,这是一个showstopper,加载项将没有任何价值.

我的问题:这可能吗?这更像是一个"是或否"的问题,而不是一个"如何"的问题,因为我需要知道我是否正在开始疯狂的追逐.但是,关于如何做到的任何指示都将是一个奖励.

delphi com excel add-in undo

9
推荐指数
1
解决办法
961
查看次数

无需管理员权限即可创建Outlook插件

我编写了一个outlook addin,其中包含一些访问webservice并在其上执行方法的基本功能.一切都像魅力一样,除了我似乎无法摆脱用户需要管理员权限来安装此加载项的事实.Google似乎没有真正的解决方案或答案.

是否可以编写一个outlook addin(VSTO),用户可以在不需要管理员权限的情况下安装它?

非常感谢提前!

c# outlook vsto add-in admin-rights

9
推荐指数
1
解决办法
3736
查看次数

无法调试Visual Studio插件

问题说明了一切.我正在尝试编写一个Visual Studio插件(2012),实验实例总是在没有运行插件的情况下启动.主实例中没有命中断点,实验实例也没有加载插件.

我应该指出:它曾经一次或两次工作,然后我删除了项目,因为我认为这是一个错误的项目,但最终用相同的名称重新创建它.

没有任何摆弄"允许插件加载"重置实验实例手动清理注册表修复问题.我也试过寻找我的addin dll,但它不在列表中.我完全没有想法和可能的搜索条件.有什么建议?

add-in visual-studio-addins visual-studio visual-studio-2012

9
推荐指数
1
解决办法
2765
查看次数

Visual Studio将类的所有属性转储到编辑器中

好的,这里有一个为视觉工作室提供了许多方便的小插件的人,或者可以帮助按键序列.

假设我有一个Person类:

class Person
{
    string Name { get; set; }
    int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正忙着快​​乐地编码.我经常遇到需要为该类的所有属性赋值的情况,或者将属性的所有值分配给其他属性.

public override void CopyTo(Person myPerson)
{
    myPerson.Name = "XXX";
    myPerson.Age = 11;
}
Run Code Online (Sandbox Code Playgroud)

我想生成这个部分:

myPerson.Name
myPerson.Age
Run Code Online (Sandbox Code Playgroud)

即只是将myPerson的所有属性转储到一个小列表中.在Visual Studio编辑器中.

我安装了resharper,我快速浏览了一个专门做这个的实用程序,但我找不到一个.有人可以帮忙吗?

c# resharper add-in visual-studio visual-studio-2012

9
推荐指数
3
解决办法
4153
查看次数

Excel异步/等待工作不正确,Excel应用程序级外接程序中的Excel事件

我在加载项应用程序中使用async/await遇到问题,我有自定义任务窗格,用户可以用它下载一些数据,所以有问题:

  1. 等待操作完成后,控件不会返回到先前的执行上下文.我用windows窗体创建了一个示例并粘贴了相同的方法等待它工作正常 - 我可以在等待操作后使用表单控件,但不是在加载项中,我必须调用自定义任务窗格调用方法.简单的例子:

    private void SearchPaneButton_Click(object sender, EventArgs e)
    {
        Search();
    }
    
    private async void Search()
    {
        var searchText = SearchTextBox.Text;
        SearchPaneButton.Text = "Loading…";
        var data = await new DataServiceClient().GetDataAsync(searchText);
        this.Invoke((MethodInvoker)(() =>
        {
            SearchPaneButton.Text = "Search";
            ToggleWorkbookEvents();
        }));
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在我的加载项中,我需要处理一些事件 - 工作表已更改,工作表已激活/已停用,但这些事件消失,并且在等待操作后未触发,我必须在每次事件后使用"切换"(删除+添加)事件等待使用.简单的例子:

    private void ToggleWorkbookEvents()
    {
        var excel = Globals.MyAddIn.Application;
        //need to ensure event will not be set twice
        excel.SheetActivate -= CheckSheetForData;
        excel.SheetActivate += CheckSheetForData;
        if (excel.ActiveWorkbook != null)
        {
            var activeSheet = Globals.MyAddIn.GetActiveWorksheet();
            //need to ensure …
    Run Code Online (Sandbox Code Playgroud)

c# excel vsto add-in async-await

9
推荐指数
1
解决办法
2314
查看次数