浅谈Excel开发:十一 针对64位Excel的插件的开发和部署
自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的插件的开发和部署的更多相关文章
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- 64位Ubuntu14.04搭建ADT开发环境
本来放假是要出去玩的,结果出游计划拖到了周一,今天先来无事看看ubuntu最近发展得怎么样了,顺便把ADT也搭建好,方便以后研究android框架.想想在windows下,ADT直接down下来解压就 ...
- 64位WINDOWS系统环境下应用软件开发的兼容性问题(CPU 注册表 目录)
应用软件开发的64 位WINDOWS 系统环境兼容性 1. 64 位CPU 硬件 目前的64位CPU分为两类:x64和IA64.x64的全称是x86-64,从名字上也可以看出来它和 x86是兼容的,原 ...
- excel 导入数据库 / SSIS 中 excel data source --64位excel 版本不支持-- solution
当本地安装的excel(2013版) 是64-bit时:出现的以下两种错误 解决: 1. excel 导入数据库 , 如果文件是2007则会出现:“The 'Microsoft.ACE.OLEDB.1 ...
- vs2010中配置OpenGL以及针对64位系统所遇问题的解决办法
一.下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C+ ...
- c# excel 读写 64位操作系统 64位excel
用c#读写excel时,会出现 “本机未注册Microsoft.ACE.OLEDB.12.0 驱动(什么的,忘了)” 读写 64位的excel 时,要在项目属性里改一下目标平台,默认的为*86, 改为 ...
- ubuntu 14.04 64位使用google官方android开发集成工具adt-64位无法使用adb
在使用ubuntu64位(14.04)时,下载来一个adt-bundle-linux-x86_64-20131030.zip,但是运行时报错: Android: Gradle: Execution f ...
- 【Qt开发】Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包
Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包 今天开始系统的学习QT,第一个测试的问题就是在纯净的系统中如何正常运行,也就是找出QT生成的exe的依赖库 ...
- 浅谈Redis的基本原理和数据类型结构的特性和应用开发场景
一.Redis介绍 1,redis介绍(Redis安装在磁盘:Redis数据存储在内存) redis是一种基于键值对(key-value)数据库,其中value可以为string.hash.list. ...
随机推荐
- 6 Candy_Leetcode
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- 关于 js 一些基本的东西
r.js 可以打包(可以实现前端文件的压缩与合并). 客户端尽量遵循 amd 规范. 推荐使用 requirejs 规范. requirejs 简单教程: http://www.runoob.com/ ...
- TF-IDF算法确定阅读主题词解答英语阅读Title题目
#include <math.h> #include <time.h> #include <stdlib.h> #include <iostream> ...
- React Native MAC上环境搭建笔记
今天花了一点时间搭建了一下react native环境,在这个过程中遇到了一些问题,处理并总结一下,年纪大了记性不好,只能多写写...真是岁月不饶人啊! 第一步:安装最新版本的Xcode工具 第二步: ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- 伪Textatea的构建(div+table),以及相应的滚动条问题与safari上的优化
在页面中创建一个不可编辑的文本块,并且文本块的篇幅较大,第一反应是创建一个textarea,并将它的disabled="disabled",并设置相应的scroll属性,就可以构建 ...
- 数据泵Expdp和Impdp
一.数据泵导入导出技术 1.结构 2.目录对象 二.EXPDP参数 1.attach 2.content 3.directory 4.dumpfile 5.estimate 6.estimate_on ...
- PHP中关于PDO的使用
执行没有结果集的查询 执行INSERT,UPDATE,DELETE的时候,不返回结果集.这个时候可以是有exec(),exec()将返回查询所影响的行数 int PDO::exec ( string ...
- C语言中函数声明实现的位置
在学习C语言的时候我遇到了这么个事情,因为之前先学习的C#,在C#编译器中,函数的声明位置不会影响编译的结果,但是在C语言中却发生了错误 先看一段代码: #include <stdio.h> ...
- 本周PSP流程进度
一计划 (1)估计这个任务需要多少时间:8天 二开发 (1)需求分析:作为一名观众,我希望了解每一场的比赛成绩,以便加深对自己喜爱球队的了解,以及赛况. (2)生成设计文档: (3)设计复审(和同学交 ...