尝试Office 2003 VSTO的开发、部署

背景:一年前,某项目需要使用到Excel进行数据录入,考虑到很多用户还是使用XP+Office 2003,所以开发的时候直接使用Excel 2003版本进行VBA开发。也许很多人都会说,Win10都出了,微软的Office都要免费了,还用Office2003???但客户是上帝!

大概开发过程:用户直接打开一个Excel文件,Excel文件提示用户登陆;登陆之后,看到待办任务;选择待办任务,打开对应的Excel表单模板进行数据录入;保存提交。以上操作,Excel里的VBA都会以服务器里的服务服务交互(废话)。

问题来了,因为VBA是直接嵌入到Excel文件里的,只有一个项目的时候,维护更新起来还不是很麻烦,但是当其它项目也想使用此Excel程序,就头痛了,总不能每个项目一套VBA代码吧。。。

Why not VSTO (Visual Studio Tools for Office) ?

VSTO的受众是“专业开发者”,可以理解为靠它赚钱,如果是处理日常工作中的问题vba更合适。OK,我们好歹也是“专业开发者”,那试试用VSTO吧。

相信很多人都跟我一样,开发机装的都是Win7+、VS2012+、Office2010+。

1、VS2012和Office2010环境

没有犹豫的,我首先是尝试直接在VS2012和Office2010下进行Excel2003 VSTO 的开发。新建 - Office - Excel2010工作薄 - 确定,在向导页面,下拉选项里确实也可以看到97-2003选项。选择03格式后,生成、F5都没有问题。

接下来,简单制作了个安装包。在开发机安装,成功运行!关键的是,把安装包拿到虚拟机(xp、office2003),运行时提示未能加载公共语言运行库,相关的Net Framework是已经安装了的!P.S:如果不是用安装包部署,直接拷VS Bin目录下的文件到虚拟机,会提示未能找到addin元素。

上面这个问题纠结了一阵之后,才终于意识到VS2010以上的版本是已经不支持Office 2003 的VSTO了。

 

2、VS2005和Office2003环境

重新开了个虚拟机,然后从网上下载了个VS2005的中文版(虽然说“过时”了,但网上还是有一大堆下载的)。然后再下载Office2003完整版。看到园子这篇文章说VS和Office的安装先后顺序,我还是特意先安装Office的。

把VS2005的SP1也打上了。

来看看VS2005令人念旧的界面。

 

在VS2005,新建Office项目时,默认只有那么几个选项,如下图所示。

 

生成、调试什么的,一切都还正常。然后准备部署。嗯,对了,贴上经典的两篇MSDN文章的链接。

Deploying Visual Studio 2005 Tools for Office Solutions Using Windows Installer (Part 1 of 2)

Deploying Visual Studio 2005 Tools for Office Solutions Using Windows Installer: Walkthroughs (Part 2 of 2)

 

第一眼看上去,还真的是“长篇大论”,满眼的E文,看到头都有点痛,一目十行地看了一下,然后动手新建VS Setup Project。

在添加Prerequisites(系统必备)时,发现列表里打不到Office runtime和Office tools。好吧,又是百度(基本上没有找到有用的),又是谷歌,还把Office重装了,Vs修复了,那几个东西依旧躲猫猫。

 

山穷水尽疑无路的时候,重新看回Deploying Visual Studio 2005 Tools for Office Solutions Using Windows Installer (Part 1 of 2)。耐心地看下去,蓦然发现:“

Adding the Visual Studio 2005 Tools for Office Packages to the Bootstrapper

The following instructions describe how to add the packages listed above to the bootstrapper package directory. These changes need only be made once and only on the development computer.

For this task, you must have the files that are available in the Windows Installer that accompanies this article. You must prepare the files before you copy them into the bootstrapper package directory.

Preparing the Office Application and Office Primary Interop Assemblies Checks

You must compile the Office application and primary interop assembly checker program samples.

......”

晕啊,不是所有的教程贴都是有图有真相的。如何添加Office包到安装启动器的步骤被我忽略了!下面对原文的操作步骤简单的用自己话翻译下来。

 ①安装.NET Framework 2.0 software development kit (SDK) and the Windows Platform SDK (在线安装链接)

这些默认是没有和vstor一起安装的,需要自己去微软下载中心下载安装。后者在线安装时间比较长,需要耐心等待。建议直接下载硬盘版本,本地完全安装。

如果用的是 Microsoft Visual Studio Team System,则这些不是必需的。

 

②编译检查程序

原文有提供一个代码示例和部署工具的集合安装包,需要下载并安装,然后在

C:\Program Files\Microsoft Visual Studio 2005 Tools for Office Resources\VSTO2005 Windows Installer Sample

可以看到相关的文件,简称此目录为{SamplesDir}。

打开VS2005命令提示,cd到{SamplesDir}\projects\Checks目录。

先后输入以下命令:

cl.exe -I "C:\Program Files\Microsoft Platform SDK\Include" /Oxs /MT /GS AppCheck.cpp  

此时可以看到目录下面多出了几个文件
 
cl.exe -I "C:\Program Files\Microsoft Platform SDK\Include" /Oxs /MT /GS PIACheck.cpp "C:\Program Files\Microsoft Platform SDK\Lib\advapi32.lib"

如果没有成功安装 the Windows Platform SDK,会提示无法打开输入文件哦。 然后把生成的PIACheck.exe 复制到{SamplesDir}\packages\Office2003PIA.
③准备Office 2003 primary interop assemblies(交互程序集)
下载并解压 Office 2003 Update: Redistributable Primary Interop Assemblies ,然后把解压得到的O2003PIA.msi 复制到{SamplesDir}\packages\Office2003PIA文件夹。

④准备Visual Studio 2005 Tools for Office Runtime(运行时)
下载 ,把vstor.exe 复制到{SamplesDir}\packages\VSTORuntime文件夹

⑤准备Visual Studio Tools for Office Language Pack (语言包)
下载,把 vstolp20.exe 复制到 {SamplesDir}\packages\VSTOLP文件夹

⑥把打包信息目录拷贝到启动加载器目录
原文是这样说的
In Visual Studio 2005 Tools for Office, the default directory is here:
C:\Program Files\Microsoft.NET\SDK\v2.0\BootStrapper\Packages\
In Visual Studio Team System, the default directory is here:
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages
我的是VS2005 SE、Windows Server 2003,找不到第一个路径,就只好把它拷到第二个目录了。
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages

 

 到此,算是告了一个基本段落,重新打开VS2005,可以看到在系统必备里,那几个东东是终于跑出来了!

 

 

 
 
 




 

 

转载于:https://www.cnblogs.com/oneivan/p/4243574.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初级开发人员在编写单元测试时常犯的错误

自从我编写第一个单元测试以来已经有10年了。 从那时起,我不记得我已经编写了成千上万的单元测试。 老实说,我在源代码和测试代码之间没有任何区别。 对我来说是同一回事。 测试代码是源代码的一部分。 在过去的3-4年中,我与多个开发团队合作…

OpenDaylight开发hello-world项目之开发工具安装

OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码框架搭建 在ODL开发之前,要安装好开发环境。ODL使用java语言开发,所以要安装好java。ODL的代码框架是有maven这个…

Google Chrome 扩展程序开发

根据公司的规定,每月八小时,弹性工作制。所以大家平时来的不太准时,如果有事,下班也就早些回去了。所以一个月下来工作时间可能不够,但是公司的考勤日历是这样的: 除了请假和法定节假日外,其他样…

[Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现

本文说说ViewModel的这个INotifyPropertyChanged接口可以用来做啥? 举例1:我有个TabControl,里面放了很多View,每个由ViewModel控制,我想是想TabSelectionChanged就打开相应的ViewModel,怎么做?…

[读书笔记]TCP/IP详解V1读书笔记-4 5

IP地址与以太网地址之间的关系 R P发送一份称作A R P请求的以太网数据帧给以太网上的每个主机。这个过程称作广播,在32 bit的I P地址和采用不同网络技术的硬件地址之间提供动态映射 ----------------------------------------- arp以太网帧的类型字段为x 0 8 0 6&am…

未来是Apache Karaf上的微服务架构

这是Jamie Goodyear的客座博客文章( 博客 , icbts )。 他是Savoir Technologies的开源倡导者,Apache开发人员和计算机系统分析师; 他为全球大型组织设计,批判和支持了体系结构。 他拥有纽芬兰纪念大学的计…

使用内存回流的方法来实现将image的内容转换为 byte[]

在今天的开发中老大不知道怎么突发奇想&#xff0c;要使用Image的Byte数据。当时使用老几种方式效果均不理想&#xff0c;最后发现其实可以使用内存回流的方式来实现。多的不说老&#xff0c;马上贴上代码&#xff1a;/**//// <summary> /// 将byte[]转换为Image…

通过设计国际象棋游戏来了解策略模式

今天&#xff0c;我们将借助一个示例来尝试了解策略模式。 我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式&#xff0c;而不是构建全面的国际象棋游戏解决方案。 策略模式&#xff1a;策略模式被称为行为模式-用于管理对象之间的算法&#xff0c;关系和职责。 策…

群发邮件

最近&#xff0c;通过两周的学习&#xff0c;对.net 的基础知识有了进一步的了解。觉得自己可以写个小程序了。于是花了两天时间写了一个 群发邮件的一个WinForm小程序。自己在这里小秀一下&#xff0c;表扬及鼓励一下自己。哈哈&#xff01; 此小程序在发送邮件的基础上还添加…

Npm install failed with “cannot run in wd”

Linux环境下&#xff0c;root账户&#xff0c;安装某些npm包的时候报下面的错误&#xff0c;例如安装grunt-contrib-imagemin时&#xff1a; Error: EACCES, mkdir /usr/local/lib/node_modules/coffee-scriptnpm ERR! { [Error: EACCES, mkdir /usr/local/lib/node_modules/c…

我的Google Adsense帐户被关

一、 上周四&#xff0c;我收到Google的邮件&#xff0c;宣布关闭我的Adsense帐户。 "您好&#xff01; 查看了相关记录后&#xff0c;我们确认您的 AdSense 帐户存在引起无效活动的风险。保护 AdWords 广告客户&#xff0c;使其免受无效活动的侵害是我们的责任&#xff0…

csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别...

ODP.NET: 引用&#xff1a; using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle.DataAccess.Types; //下载 http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html //引用&#xff1a;D:\app\geovindu…

Java 9幕后花絮:新功能从何而来?

找出Java幕后发生的事情&#xff0c;以及新功能如何实现 在上一篇文章中&#xff0c;我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能&#xff0c;并简要提到了将新功能添加到下一个版本之前要经历的过程。 由于此过程几乎影响了所有Java开发人员&#xff0c;但大多数…

sudo apt-get install libstdc++6

sudo apt-get install libstdc6 yum install libncurses.so.5 sudo apt-get install libncurses.so.5 sudo apt-get install lib32ncurses5 apt-get update把源更新一下 使用gdb时的指令 (gbd) info line *0x08xxxx sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.…

AngularJS快速入门指南03:表达式

AngularJS通过表达式将数据绑定到HTML。 AngularJS表达式 AngularJS表达式写在双大括号中&#xff1a;{{ 表达式语句 }}。 AngularJS表达式绑定数据到HTML的方式与ng-bind指令的方式相同。 AngularJS会准确地将表达式“输出”为计算的结果。 AngularJS表达式与JavaScript表达式…

零基础快速上手HarmonyOS ArkTS开发2---ArkTS开发实践

ArkTS开发实践&#xff1a; 接着上一次零基础快速上手HarmonyOS ArkTS开发1---运行Hello World、ArkTS开发语言介绍继续&#xff0c; 在上一次对于ArkTS的基础知识进行了学习&#xff0c;依照官方的课程计划&#xff0c;还有两个具体的小案例需要来实践实践&#xff1a; 实践出…

八、VueJs 填坑日记之参数传递及内容页面的开发

我们在上一篇博文中&#xff0c;渲染出来了一个列表&#xff0c;并在列表中使用了router-link标签&#xff0c;标签内的&#xff1a;to就是链接地址&#xff0c;昨天咱们是<router-link :to"/content/ i.id">这样写的&#xff0c;今天我们来完成内容页面的渲染…

为Kindeditor控件添加图片自动上传功能

Kindeditor是一款功能强大的开源在线HTML编辑器&#xff0c;支持所见即所得的编辑效果。它使用JavaScript编写&#xff0c;可以无缝地与多个不同的语言环境进行集成&#xff0c;如.NET、PHP、ASP、Java等。官方网站可以查看这里&#xff1a;http://kindeditor.net/index.php Ki…

4个万无一失的技巧让您开始使用JBoss BRMS 6.0.3

上周&#xff0c;红帽发布了标记为6.0.3的JBoss BRMS的下一版本&#xff0c;已订阅的用户可以在其客户门户中使用。 如果您对该版本的新增功能感到好奇&#xff0c;请在客户门户网站上在线查看版本说明和其余文档 。 我们正在寻找一些简单的方法来开始使用此新版本&#xff0…

带有Angular JS的Java EE 7 – CRUD,REST,验证–第2部分

这是Angular JS承诺的Java EE 7的后续版本–第1部分 。 花了比我预期更长的时间&#xff08;找到时间来准备代码和博客文章&#xff09;&#xff0c;但是终于到了&#xff01; 应用程序 第1部分中的原始应用程序只是带有分页的简单列表&#xff0c;以及提供列表数据的REST服务…