• 基于Visual Studio 2003/2005的Office插件开发FAQ (转)


    最近处理了好几个Office Addin的问题,总结出一些经验,在此与大家分享一下。

    首先介绍一些注意点

    1. 一定要把宏安全级别设置为Medium以下,默认是High,肯定不允许运行任何Addin,这点一定要注意,否则再怎么改程序也是徒劳

    2. 在开发Addin的机器上,建议仅安装一个版本的Office,否则可能因为引用的Office Library Reference混淆,导致在其他机器上无法正常加载

    3. 如果你开发的是Office XP的Add-in,必须安装Office XP PIA (primary interop assemblies),这是对Office COM对象的封装库。

    你可以到http://www.microsoft.com/downloads/details.aspx?familyid=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en下载。

    3. 在创建Addin项目时一定要正确选择Office目标程序,如Word, Excel, Visio, PowerPoint等,如下图所示:


    4. 在创建Addin向导的倒数第二步,通常情况下一定要将两个选项都选中,特别是第二个选项,否则可能由于不支持所有用户都运行,而出现未自动加载的情况。


    接下来是常见问题解答

    问题1 在Office插件加载时,即使加载失败也不会有任何提示,如果出现Assembly加载错误,我该如何跟踪这些错误
    我们可以在.net自带的工具中找到一个叫做Assembly Binding Log Viewer的工具,通过它我们可以几乎所有的assembly加载异常。要注意的是,每个版本的.net都自带了一个相应版本的Assembly Binding Log Viewer,所以运行的时候要看一下调用的是哪个版本的。比如我们现在要调试基于.net 1.1开发的Office插件,可以通过以下步骤运行:
    1. 点击 开始 > Microsoft Visual Studio .NET 2003 > Visual Studio .NET 工具 > Visual Studio .NET 2003 命令提示,
    2. 在进入Visual Studio 2003命令行模式下,输入fuslogvw.exe

    这时我们就可以看到该工具的界面了,如图:


    有关该工具的详细信息可以看http://msdn2.microsoft.com/en-us/library/e74a18c4(vs.80).aspx

    同样的,如果我们要启动.net 2.0的Assembly Binding Log Viewer就在VS2005的命令行下输入fuslogvw。

    问题2 Visual Studio 2005开发的Office插件无法在Office中运行
    这个问题可能是由于没有安装KB908002中提到的prerequisite造成的,可以去下面的地址下载该文档中提到的补丁:http://support.microsoft.com/kb/908002

    安装完成后,我们可以在Add-in的安装项目的prerequisites中找到一个新的组件。

    如上图所示,其中多了一个Shared Add-in Support Update for Microsoft .NET Framework 2.0 (KB908002)

    问题3 如何制作兼容多个版本Office的Office Addin
    通常情况下,我们编写的Add-in都是直接用向导生成的,且使用的是早期绑定技术(early binding)。但在许多需求中,我们需要制作一个能够兼容多个Office版本的Add-in,这时我们就不能使用早期绑定了,而应该使用后期绑定(late binding)。关于早期绑定和后期绑定的详细信息,请见http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm

    问题4 通常Addin设置保存在注册表的什么位置
    以Office 2003 Word Add-in为例,通常会保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins中。
    假设我们有一个名字为MyAddin1的Addin,那么它就会保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins\MyAddin1.Connect中。

    对于Excel Add-in来说,也是类似的,通常保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins中,依此类推。

    在每个Add-in的设置属性中有一个重要的标志LoadBehavior,这个属性是保存在XXXX.Connect中的,类型为DWORD,这个值直接决定了Addin的启动模式,默认值为3表示Office应用程序一启动就运行,这个设置与我们在Addin向导中选择的"I would like my Add-in to load when the host application loads"是对应的。

    问题5 当确定你的Add-in应该可以正确加载,但在启动时没有加载,这是怎么回事
    如果一个Add-in因为某些原因在启动时加载失败,Office应用程序会自动把LoadBehavior改成8,这表示仅在需要加载时才加载该Add-in,而不是在Office启动时。所以这时可以到与该Add-in对应的注册表项中检查一下LoadBehavior值是否正确,如果为8,一定把它改成3。

    问题6 你不确定Add-in的哪一部分出了问题,该如何调试
    首先必须确定assembly的引用没有出现问题,关于如何检测引用出错的情况已经在问题1中说明。

    接下来我们就要检查OnConnection是否被调用,我们可以在OnConnection中加入一句调试语句,如下

    public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
    {
    MessageBox.Show(
    "OnConnection Loaded");
    applicationObject 
    = application;
    addInInstance 
    = addInInst;
    }

    如果OnConnection加载成功,那么肯定会弹出一个对话框,否则就要考虑检查一下是不是设置的问题,如是不是LoadBehavior的值不正确。(见问题5)

    接下来的调试也是类似的,通过加入MessageBox.Show或其他调试语句来检查代码是否已运行到某个位置。

      回复  引用  查看    
    #1楼 2007-02-06 09:32 | 喝酒的猫      
    问一下,开发vs2003的插件属于office开发吗?
      回复  引用  查看    
    #2楼 2007-02-06 09:34 | 风生水起      
    不错,收藏。
      回复  引用  查看    
    #3楼 [楼主]2007-02-06 14:54 | Tony Qu      
    @喝酒的猫
    不属于,Office Addin项目创建的时候,选的就是Shared-Addin而不是Visual Studio Addin
      回复  引用    
    #4楼 2007-03-21 15:58 | XG [未注册用户]
    请问怎么调试这样的插件项目啊.
      回复  引用  查看    
    #5楼 2007-04-11 18:39 | 随心所欲      
    请问,我的程序访问 联系人 的时候总是有一个访问时间的限制(选择几分钟),这个怎么解决?
      回复  引用    
    #6楼 2007-04-16 10:25 | 陈小胖 [未注册用户]
    你好,看了您的blog,似乎可以直接在office 2005中开发office addin项目的,但是我在office 2005中没有找到建立addin项目的选项,在msdn的VSto文档中也没找到相关链接,请问该如何建立office addin项目?相关的链接和文档有哪些?谢谢!
      回复  引用  查看    
    #7楼 [楼主]2007-04-17 01:12 | Tony Qu      
    office 2005?! 我只听说过office 2007
      回复  引用  查看    
    #8楼 2007-04-29 12:40 | 马维拉的真实之眼      
    在vs2005内,新建的时候是这样的。
    新建项目-》项目类型:其他项目类型-》扩展性-》共享的外接程序。


    建立后,引用msword.olb.

    就可以创建出来在word中加载的 外接程序。。


    现在正在研究怎么打包安装这种外接程序。
      回复  引用    
    #9楼 2007-06-13 09:09 | 邢少 [未注册用户]
    这位大哥,小弟也碰到了相同的问题啊..安装后在目标机器上的Excel工具条上没有按钮啊..但我的机子在调试生成后..是可以的啊 ..打包,安装在另一台上后,就不行了..注册表中那个“LoadBehavior”..有一个是2啊..?打个给解决一下啊..等待中..........
      回复  引用    
    #10楼 2007-06-14 18:06 | 邢少 [未注册用户]
    楼主~!帮帮忙啊..怎么没有人回答啊...........路过的高手...砸个答案好不..
      回复  引用    
    #11楼 2007-11-26 21:40 | rainyfox [未注册用户]
    你好,我也做了一个组件,但是有两个问题。
    1,有些机器上安装后,打开Word时没任何反应,但在注册表中都是正确的。
    2.可以安装的机器上在word下只能在第一个word窗口执行,如果不关闭第一个窗口再新开一个Word窗口就不能再执行,而在excel下就没这个问题。请知道的高手能够帮助解决
      回复  引用  查看    
    #12楼 2007-12-02 14:35 | 马维拉的真实之眼      
    切记切记:安装完毕发现没有出现工具条的,都是因为那个补丁(908002
    )没有加入安装包,至于loadbehave的设置,在安装程序中的注册表里面设置好,然后安装程序安装的时候自动会添加入注册表的.
    至于 rainyfox 的第二个问题,还没遇到过.

     

  • 相关阅读:
    shell十三问?
    OS + Linux nmon / nmon analyser / nmon_analyser_v52_1.zip
    nGrinder windows agent / linux agent
    java Base64
    SearchServer Elasticsearch Cluster / kibana
    db mysql / mysql cluster 5.7.19 / my.cnf / thread_pool_stall_limit
    Mininet与真实网络链接的方法
    Install ProcessMaker 3.1 or 3.2 in CentOS/RHEL 7
    软件版本GA,RC,alpha,beta,Build 含义
    paper-9-Research and Implementation of MultiPath TCP on Mobile Smart Deviceses
  • 原文地址:https://www.cnblogs.com/feng801/p/1392870.html
Copyright © 2020-2023  润新知