自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集。

随着64位操作系统的安装,Office 2010及以上版本的普及以及计算机的内存容量越来越高,使用64位Excel的用户越来越多,所以让插件支持64位Excel能够赢得一部分用户。前面十篇文章中所讲解的技术适用于不同版本和不同位数的Excel,但是由于32位的COM组件不支持64位的Excel,所以在针对不同位数的Excel的编译和部署的时候,有些地方可能需要注意和有所不同。

64位版本的Office只能安装在64位的操作系统之上,32位的Office采用Windows-32-on-Windows-64 (WOW64) 技术可以安装在64位操作系统上,这也是32位Office在64位操作系统上的默认安装方式,同时基于32位的Office插件也可以运行在安装在64位操作系统上的32位的Office。WOW64 使用x86的模拟器能够使得基于32位Windows的应用程序可以无缝的运行在64位的操作系统上。

本文首先讲解如何检测用户机器上Excel的版本,然后介绍Shared Add-ins插件编译的时候针对不同版本的注意事项,最后介绍部署的时候需要注意的问题。

如何判断用户Excel的位数

在Excel 2010中开始菜单->帮助中有Excel的版本信息:

在Excel 2013中开始菜单->帐户->关于Excel下点开之后也有版本信息:

以上是直接查看Excel的版本,当在客户机器上通过代码部署插件的时候,可能需要通过注册表信息来诊断用户当前安装的Excel版本。

如果安装了64位版本的Office,那么可以通过Outlook的注册表节点下的名为Bitness的类型为REG_SZ的注册表项的值来判断版本信息,该值有x86和x64,说明了版本信息,不管用户安装与否Outlook,均有该节点,一般的我们查找对应Office版本的位数信息(11-Office2003,12-Office2007, 14-Office2010, 15-Office2013)。

  • 注册表项位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook

  • 注册表键: Bitness
  • 注册表值: x86 或者x64

通过代码读取注册表该项下的改注册表的值即可判断Office的版本。

为64位Office编译程序集

如果采用Shared Add-ins技术来为Excel开发插件,程序集实际上是编译为了COM组件。默认情况下,我们的编译目标设置为了Any CPU,但是对于要注册为Com组件的程序来说,Any CPU并不能支持64位的Excel,所以我们需要明确指定为x64。所有用到COM组件的,如UDF函数库,RTD函数,TCP的应用程序集都需要编译为x64并且注册为COM组件。

浅谈Excel开发:八 Excel 项目的安装部署 这篇文章中已经说过,当勾选了注册为COM组件的时候,Visual Studio实际上是在生成完了dll之后帮我们调用了regasm来注册改dll为Com组件(如果是采用C++或者其他非托管编程语言编写的dll,则需要使用regsver32 这个应用程序来注册)

regasm "D:/YYUDF/YYAddIn/YYSharedAddin/bin/Debug/YYSharedAddin.dll" /codebase /s

regasm和regsver32都有对应的32位和64位版本,在最新的Visual Studio 2013中,软件会帮我们自己选择正确的版本,但是在之前的版本中,如果您选择编译为x64并且注册为COM组件,编译的时候可能会出现如下 “xxx.dll不是有效的应用程序集”的错误:

这是由于Visual Studio没有为我们选择正确的注册工具regasm或者regsver32的版本。可以在项目的编译属性->Build Events->的Post-build event command line中输入如下:

"%Windir%\Microsoft.NET\Framework64\v2.0.50727\regasm" "$(TargetPath)"

该命令指定了使用64位的regasm来注册我们编译好的dll。

同样,如果您使用的是非托管语言编译的dll,那么regsver32也需要指定为正确的版本,方法同上。

三 64位Excel插件的部署

部署插件的时候,我们应该预先分别为32位和64位分别是使用x86和x64编译两套dll,以及打包32位和64位的regasm(如果使用非托管语言则是regsver32),然后在客户机器上部署的时候,首先判断用户安装的Excel版本,然后在分别使用对应版本的注册COM组件工具regasm来注册对应版本的dll。

四 结论

本文讲述了32位和64位Excel的差别,以及如何检测用户机器上Excel的版本,然后介绍Shared Add-ins插件编译的时候针对不同版本的注意事项,最后介绍部署的时候需要注意的问题,来了解这些之后,我们写出来的插件就可以针对各种位数的Excel插件了。希望本文对您处理不同位数的COM组件注册一些Excel 64位插件的安装部署有所帮助。

浅谈Excel开发:十一 针对64位Excel的插件的开发和部署的更多相关文章

  1. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  2. 64位Ubuntu14.04搭建ADT开发环境

    本来放假是要出去玩的,结果出游计划拖到了周一,今天先来无事看看ubuntu最近发展得怎么样了,顺便把ADT也搭建好,方便以后研究android框架.想想在windows下,ADT直接down下来解压就 ...

  3. 64位WINDOWS系统环境下应用软件开发的兼容性问题(CPU 注册表 目录)

    应用软件开发的64 位WINDOWS 系统环境兼容性 1. 64 位CPU 硬件 目前的64位CPU分为两类:x64和IA64.x64的全称是x86-64,从名字上也可以看出来它和 x86是兼容的,原 ...

  4. excel 导入数据库 / SSIS 中 excel data source --64位excel 版本不支持-- solution

    当本地安装的excel(2013版) 是64-bit时:出现的以下两种错误 解决: 1. excel 导入数据库 , 如果文件是2007则会出现:“The 'Microsoft.ACE.OLEDB.1 ...

  5. vs2010中配置OpenGL以及针对64位系统所遇问题的解决办法

    一.下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C+ ...

  6. c# excel 读写 64位操作系统 64位excel

    用c#读写excel时,会出现 “本机未注册Microsoft.ACE.OLEDB.12.0 驱动(什么的,忘了)” 读写 64位的excel 时,要在项目属性里改一下目标平台,默认的为*86, 改为 ...

  7. ubuntu 14.04 64位使用google官方android开发集成工具adt-64位无法使用adb

    在使用ubuntu64位(14.04)时,下载来一个adt-bundle-linux-x86_64-20131030.zip,但是运行时报错: Android: Gradle: Execution f ...

  8. 【Qt开发】Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包

    Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包 今天开始系统的学习QT,第一个测试的问题就是在纯净的系统中如何正常运行,也就是找出QT生成的exe的依赖库 ...

  9. 浅谈Redis的基本原理和数据类型结构的特性和应用开发场景

    一.Redis介绍 1,redis介绍(Redis安装在磁盘:Redis数据存储在内存) redis是一种基于键值对(key-value)数据库,其中value可以为string.hash.list. ...

随机推荐

  1. 再探JS数组原生方法—没想到你是这样的数组

    最近作死又去做了一遍javascript-puzzlers上的44道变态题,这些题号称"JS语言专业八级"的水准,建议可以去试试,这里我不去解析这44道题了, ...

  2. abstract与interface的区别

    abstract的用法: //通过abstract 关键字修饰的类叫抽象类. abstract class Animal { String name; String color; abstract p ...

  3. JS - 柯里化

    一:what's this? 柯里化: 是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.其实,柯里化就是用闭包原理实现函数 ...

  4. 获取元素计算后的css样式封装

    获取元素计算后的css样式封装: function getCss(obj,attribute) { if(obj.currentStyle) { return obj.currentStyle[att ...

  5. python+Eclipse+pydev环境搭建

    python+Eclipse+pydev环境搭建   本文重点介绍使用Eclipse+pydev插件来写Python代码,  以及在Mac上配置Eclipse+Pydev 和Windows配置Ecli ...

  6. Mysql在windows系统下的配置

    因为项目测试需求,不得不在本地装一个Mysql才能更方便地进行程序调试,整个过程虽然简单,但也遇到了一点麻烦,所以贴出来当是备忘. 这里采用MySQL Community Server  5.7.12 ...

  7. Struts相关

    使用Struts2流程: 1.导入Struts2类包 2.在Web源代码文件夹中,创建名为struts.xml的配置文件.在其中定义Action对象,其关键代码如下: struts.xml: < ...

  8. The World's Only Advanced Operating System

    The World's Only Advanced Operating System

  9. DateTable利用NPOI导出Excel 公共方法

    protected void Export_Excel(DataTable dt) { string filename = "学生基本信息.xls"; ) { filename = ...

  10. jQuery技巧

    回到顶部按钮 图片预加载 判断图片是否加载完 自动修补破损图像 Hover切换class类 禁用输入 停止正在加载的链接 toggle fade/slide 简单的手风琴 使两个DIV同等高度 在浏览 ...