演练:Office 编程(C# 和 Visual Basic)
https://msdn.microsoft.com/zh-cn/library/ee342218(v=vs.110).aspx
PIA的全称是 primary interop assembly 主互操作程序集
http://www.cnblogs.com/pnljs/archive/2012/02/20/2359313.html
安装 Excel 外接应用程序
-
启动 Visual Studio。
-
在“文件”菜单上指向“新建”,再单击“项目”。
-
在“已安装的模板”窗格中,展开“Visual Basic”或“Visual C#”,展开“Office”,然后单击“2010”(如果使用的是 Office 2007,则单击“2007”)。
-
在“模板”窗格中,单击“Excel 2010 外接程序”(或“Excel 2007 外接程序”)。
-
查看“模板”窗格的顶部,确保“.NET Framework 4”显示在“目标框架”框中。
-
如果需要,在“名称”框中键入项目的名称。
-
单击“确定”。
-
新项目出现在“解决方案资源管理器”中。
添加引用
-
在“解决方案资源管理器”中,右击项目的名称,然后单击“添加引用”。 将显示“添加引用”对话框。
-
在“.NET”选项卡上的“组件名称”列表中选择“Microsoft.Office.Interop.Excel”14.0.0.0 版(对于 Excel 2007,则为 12.0.0.0 版),然后按住 Ctrl 键并选择“Microsoft.Office.Interop.Word”14.0.0.0 版(对于 Word 2007,则为 12.0.0.0 版)。
-
单击“确定”。
添加必要的 Imports 语句或 using 指令
-
在“解决方案资源管理器”中,右击“ThisAddIn.vb”或“ThisAddIn.cs”文件,然后单击“查看代码”。
将以下 Imports 语句 (Visual Basic) 或 using 指令 (C#) 添加到代码文件的顶部(如果这些语句尚不存在)。
using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word;
清理完成的项目
-
在 Visual Studio 中,单击“生成”菜单上的“清理解决方案”。 否则,每次在计算机上打开 Excel 时,外接程序都将运行。
查找 PIA 引用
-
重新运行应用程序,但是不要单击“清理解决方案”。
-
在“开始”菜单上,单击“所有程序”。 然后依次单击“Microsoft Visual Studio 2010”、“Visual Studio 工具”、“Visual Studio 命令提示(2010)”。
-
在“Visual Studio 命令提示(2010)”窗口中键入 ildasm,然后按 Enter。 此时将出现“IL DASM”窗口。
-
在 IL DASM 窗口中的“文件”菜单上,单击“打开”。 双击“Visual Studio 2010”,然后双击“项目”。 打开项目的文件夹,并查找 您的项目名称.dll 的 bin/Debug 文件夹。 双击 您的项目名称.dll。 一个新窗口将显示项目的特性,以及对其他模块和程序集的引用。 请注意,程序集中包括了命名空间 Microsoft.Office.Interop.Excel 和 Microsoft.Office.Interop.Word。 在 Visual Studio 2010 中,默认情况下编译器会将所需的类型从引用的 PIA 导入程序集中。
有关更多信息,请参见如何:查看程序集内容。
-
双击“清单”图标。 此时将出现一个包含程序集列表的窗口,这些程序集包含项目所引用的项。 列表中未包括 Microsoft.Office.Interop.Excel 和 Microsoft.Office.Interop.Word。 由于项目所需的类型已导入到程序集中,因此无需引用 PIA。 这样,部署会更加轻松。 PIA 不必位于用户的计算机上,并且,由于应用程序不需要部署特定版本的 PIA,因此可将应用程序设计为与多个版本的 Office 一起使用,只要所有版本中都有必要的 API 即可。
由于不再必须要部署 PIA,因此,您可以在高级方案中创建与多个版本的 Office(包括早期版本)一起使用的应用程序。 但是,只有当您的代码未使用您所使用的 Office 版本中未提供的任何 API 时,此情况才适用。 由于不能总是清楚地了解特定 API 在早期版本是否可用,因此出于该原因,建议不要使用 Office 的早期版本。
相关文章
- c# 中内部类的简单介绍 C#内部类
- c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
- 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
- C# IL DASM 使用-破解c#软件方法
- Word处理控件Aspose.Words功能演示:如何在 C# 和Java中将 DOC 转换为 JSON
- C#学习记录——调试和错误处理:Visual Studio中的调试(一):非中断(正常)模式下的调试
- c#的运算符
- C#【必备技能篇】Windows计时器分辨率:重大规则更改
- C#【必备技能篇】Visual Studio中快速查看函数的重载
- c#中动态加载及显示UserControl和Form在父控件中
- [C#] Direct2D 学习笔记 (一)vb.net转换为c#
- C# 实现WEBSOCKET聊天应用示例
- 《Visual C# 2010入门经典》一第1章 .NET Framework和C#
- Visual Studio 基础 之 VS 查看/反编译 C# dll 脚本代码的简单方法
- C#运算符的优先级
- C#实现Winform自定义半透明遮罩层
- C#打印日志的小技巧
- C# 属性(Property)
- C# 操作IIS方法集合
- c#代码规则,C#程序中元素的命名规范