自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. win7 下安装RVCT

    由于项目的需求,需要使用RVCT 3.1: 一看此包的发布日期,老的吓人,但没办法,只能硬着头皮安装: 环境:WIN7 安装软件RVCT 3.1 build 569 license:由于需要编译的代码 ...

  2. 安装zeppelin

    安装zeppelin 1.默认安装好spark集群 2.安装zeppelin 1.解压安装包 tar zxvf zeppelin-0.5.5-incubating-bin-all.tgz 2.配置环境 ...

  3. [转载] 构造linux 系统下免密码ssh登陆  _How to establish password-less login with SSH

    In present (post production) IT infrastructure many different workstations, servers etc. have to be ...

  4. ASP.NET 一句代码实现批量数据绑定

    摘要:对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定.如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以实现批量的数据绑定,作者开发了的插 ...

  5. C# 文件读写

    1.文本文件读写 //读 FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read); StreamReader ...

  6. 使用MonkeyTest对Android客户端进展压力测试

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试. 先来看一条 ...

  7. ubuntu 安装phpstorm

    1.清除 sudo apt-get purge openjdk* 2.添加源及更新源列表 sudo add-apt-repository ppa:webupd8team/java sudo apt-g ...

  8. CentOS6.5的vsftp搭建流程(一)

    前几次搭建FTP都失败了,不是登陆不了,就是目录没有权限.现在终于摸索出了靠谱的操作流程,分享之~ 1. 查看是否安装了vsftpd,未安装则安装 [root@iZ283tian2dZ /]# rpm ...

  9. unity 利用ugui 制作技能冷却效果

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...

  10. JavaScript解惑记之Array.prototype.sort()

    前言 看JS红宝书的5.2.5章节关于sort()方法,如何用一个compare函数,让数组顺序,倒序,有点云里雾里的.在网上度娘了一下,发现更迷糊了.走投无路的情况下,只能发动神技能,去 stack ...