ylbtech-LanguageSamples-OfficeSample(COM 互操作)
| ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-OfficeSample(COM 互操作) |
| 1.A,示例(Sample) 返回顶部 |
本示例演示如何使用称为“COM 互操作”、“省略 ref”、“索引属性”、“命名参数”和“可选参数”的 C# 4.0 功能来创建与 Microsoft Office 进行通信的 C# 应用程序。 传统上,为了访问 Word、Excel 等 Microsoft Office 应用程序,C# 开发人员不得不编写相对冗长的代码。 新增的 C# 4.0 功能极大简化了对 Office API 的调用。
请看本示例中所用 Microsoft Office 方法的以下声明:
void PasteSpecial(ref object IconIndex = null, ref object Link = null,
ref object Placement = null, ref object DisplayAsIcon = null,
ref object DataType = null, ref object IconFileName = null,
ref object IconLabel = null);
可以看到,此方法接受相当多的参数。 在 C# 中,开发人员传统上必须填写每个参数,即使进行这一调用的开发人员本欲通过支持可选参数来简化其使用也是如此。 在 C# 4.0 中,利用新增的对命名参数和可选参数的支持,开发人员可以仅指定所需参数,其他参数则使用其默认值:
word.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
在对 PasteSpecial 方法的调用中,Link 和 DisplayAsIcon 参数是显式命名的,且设置为值 true。 所有其他参数都默认为 Office API 开发人员在内部指定的值,如上面的签名所示。
您可以创建自己的支持命名参数和可选参数的调用。 请看以下示例:
public void M(int x, int y = 5, int z = 7) { }
在此方法中,为参数 y 和 z 分配了默认值。 对此方法的调用如下所示:
M(1, 2, 3); // M 的普通调用
M(1, 2); // 省略 z,等效于 M(1, 2, 7)
M(1); // 同时省略 y 和 z,等效于 M(1, 5, 7)
M(1, z: 3); // 通过名称传递 z
M(x: 1, z: 3); // 通过名称同时传递 x 和 z
M(z: 3, x: 1); // 反转实参的顺序
通过 C# 4.0 新增的动态功能,C# 开发人员可以更加方便地对 Office 编程。 现在,Office 中使用的类型可供 C# 开发人员调用,如同以 dynamic 类型对它们进行了声明一样。 下面是设置单元格属性的传统方式:
((Excel.Range)excel.Cells[1, 1]).Value2 = "ID";
现在,在 C# 4.0 中,开发人员可以编写如下所示的代码:
X1.Cells[1, 1].Value = "ID";
借助索引属性功能,可以进一步简化调用,如下所示:
xl.Cells[1, 1] = "ID";
最后要介绍的是 No-PIA 功能,Office 开发人员一定会对它感兴趣。 主互操作程序集从 COM 接口生成,可在设计时提供有用的类型支持。 不过在运行时,这些程序集会增加程序的大小,可能导致版本控制问题。 利用 No-PIA 功能,可以继续在设计时使用 PIA,但在运行时省略 PIA。 C# 编译器将程序实际使用的小部分 PIA 直接复制到其程序集中。 您不再需要在程序的分发中包括 PIA。
| 1.B,示例代码(Sample Code)返回顶部 |
1.B.1, Program.cs
// 版权所有(C) Microsoft Corporation。保留所有权利。
// 此代码的发布遵从
// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
//
using System;
using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word; public class Account
{
public int ID { get; set; }
public double Balance { get; set; }
} public class Program
{
static void Main(string[] args)
{
var checkAccounts = new List<Account> {
new Account {
ID = ,
Balance = 541.27
},
new Account {
ID = ,
Balance = -127.44
}
}; DisplayInExcel(checkAccounts, (account, cell) =>
{
// 此多行 lambda 表达式将设置
// 自定义处理规则。
cell.Value = account.ID;
cell.Offset[, ].Value = account.Balance; if (account.Balance < )
{
cell.Interior.Color = ;
cell.Offset[, ].Interior.Color = ;
}
}); var word = new Word.Application();
word.Visible = true;
word.Documents.Add();
word.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
} public static void DisplayInExcel(IEnumerable<Account> accounts,
Action<Account, Excel.Range> DisplayFunc)
{
var xl = new Excel.Application(); xl.Workbooks.Add();
xl.Visible = true;
xl.Cells[, ] = "ID";
xl.Cells[, ] = " Balance";
xl.Cells[, ].Select();
foreach (var ac in accounts)
{
DisplayFunc(ac, xl.ActiveCell);
xl.ActiveCell.Offset[, ].Select();
} xl.Range["A1:B3"].Copy();
//xl.get_Range("A1:B3").Copy(); xl.Columns[].AutoFit();
xl.Columns[].AutoFit();
}
}
1.B.2,
| 1.C,下载地址(Free Download)返回顶部 |
![]() |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
ylbtech-LanguageSamples-OfficeSample(COM 互操作)的更多相关文章
- ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分) 1.A,示例(Sampl ...
- ylbtech-LanguageSamples-ComInteropPart2(COM 互操作第二部分)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-ComInteropPart2(COM 互操作第二部分) 1.A,示例(Sample) ...
- 没有为 COM 互操作注册程序集 请使用 regasm.exe /tlb 注册该程序集——解决办法
错误现象: 错误 6 没有为 COM 互操作注册程序集“DevExpress.Utils.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToke ...
- VS2013中, 无法嵌入互操作类型“……”,请改用适用的接口的解决方法
使用VS2013,在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示. 查阅资料,找到解决方案,记录如下: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作 ...
- VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法(转自网络)
最近开始使用VS2010,在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示.查阅资料,找到解决方案,记录如下: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌入 ...
- 与Java互操作
课程内容涵盖了Java互操作性. Javap 类 异常 特质 单例对象 闭包和函数 变化性 Javap javap的是JDK附带的一个工具.不是JRE,这里是有区别的. javap反编译类定义,给你展 ...
- Microsoft.Office.Interop.Excel 程序集引用 ,Microsoft.Office.Interop.Excel.ApplicationClass 无法嵌入互操作类型
using Microsoft.Office.Interop.Excel 添加程序集引用 方法:在引用--程序集--扩展中,添加引用Microsoft.Office.Interop.Excel,此 ...
- ArcEngine 无法嵌入互操作类型
说明: 在.net 4.0中,声明 IPoint point = new PointClass();会出现下面这个错误 错误 2 类型"ESRI.ArcGIS.Geometry.PointC ...
- 错误 24 无法嵌入互操作类型“ESRI.ArcGIS.Geometry.PointClass”。请改用适用的接口。 E:\MyGIS\MyGIS\Form1.cs 78 37 MyGIS
解决办法:选中那个引用,在属性页,将“嵌入互操作”设置为false
随机推荐
- 在写一次epoll
epoll & select & poll只能处理IO相关的操作,epoll每一个操作必须注册到时间监控机制中,并且还需要进程或者线程进行管理. 多进程/多线程 和epoll相比较 e ...
- request.getRemoteAddr() 获取的值为0:0:0:0:0:0:0:1的原因及解决办法
问题: 在近期开发的javaweb项目中,需要记录登录时的电脑ip地址和主机名,通过request.getRemoteAddr()和request.getRemoteHost()得到的值都是0:0:0 ...
- redis之(七)redis的集合类型的命令
[一]增加/删除元素 --->命令:SADD key member [member...] --->向集合键中添加一个,或多个元素.如果键不存在,则创建.如果元素存在,则忽略不执行.返回值 ...
- 四十六 常用内建模块 itertools
Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...
- php获取不到url问号之后的参数
url规则已定义: RewriteRule ^/member/editprivilege/([0-9]+) /access.php?_u=mobile/editprivilege&aid=$1 ...
- linux下LD_PRELOAD的用处
linux下LD_PRELOAD的用处 在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前 ...
- 转:使用IDA动态调试WanaCrypt0r中的tasksche.exe
逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe 转:http://www.4hou.com/technology/4832.html 2017年5月19日发布 导语: ...
- Loj#6434「PKUSC2018」主斗地(搜索)
题面 Loj 题解 细节比较多的搜索题. 首先现将牌型暴力枚举出来,大概是\(3^{16}\)吧. 然后再看能打什么,简化后无非就三种决策:单牌,\(3+x\)和\(4+x\). 枚举网友打了几张\( ...
- ZOJ 3949 Edge to the Root(想法)(倍增)
Edge to the Root Time Limit: 1 Second Memory Limit: 131072 KB Given a tree with n vertices, we ...
- 【大杀器】利用划分树秒杀区间内第k大的数
最近看了一道题,大概就是给出一个序列,不断询问其子区间内第k大的数,下面是个截图 绕了一圈没找到中文版题目,if(你是大佬) then 去看截图:else{我来解释:给出一个整数n,和一个整数m,分别 ...
