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
随机推荐
- Python在线教程
Python 3.x的 http://www.ziqiangxuetang.com/python3/python3-stdlib.html 廖雪峰的官方网站 http://www.liaoxuefen ...
- 【python】配置文件
来源:http://developer.51cto.com/art/201003/189885.htm python 读写配置文件在实际应用中具有十分强大的功能,在实际的操作中也有相当简捷的操作方案, ...
- git学习资源合集
git官网 Pro git 电子书,这里还有中文版,这也是官方推荐的. 再加一个廖雪峰的简明git教程.
- hdu5756
http://www.cnblogs.com/duoxiao/p/5777644.html 官方题解在这里 其实这道题不难,当初训练的时候不会做说明自己太弱 lazy标记不pushdown就是用laz ...
- [水煮 ASP.NET Web API2 方法论](12-2)管理 OData 路由
问题 如何控制 OData 路由 解决方案 为了注册路由,可以使用 HttpConfigurationExtension 类中 MapODataServiceRoute 的扩展方法.对于单一路由这样 ...
- 一款简洁而强大的前端框架—JQuery
jQuery是什么? jQuery是一个快速.简洁的JavaScript框架,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画 ...
- 让你完全理解Base-64是怎么回事
HTTP将BASE64-编码用于基本认证和摘要认证,在几种HTTP扩展中也使用了该编码. Base-64编码保证了二进制数据的安全 Base-64编码可以将任意一组字节转换为较长的常见文本字符序列,从 ...
- 使用CSS让元素尺寸缩小时保持宽高比例一致
CSS中有一个属性padding对元素宽度存在依存关系.如果一个元素的 padding属性以百分比形式表示,padding 的大小是以该元素自身宽度为参照的. 若想要元素尺寸变化时,宽高比例不变,可以 ...
- 一个Bean属性拷贝的工具类
package com.fpi.spring.qaepb.cps.util; import java.beans.IntrospectionException; import java.beans.P ...
- 简单了解gzip、bzip2、xz
压缩工具gzip.bzip2.xz分别对应压缩格式.gz..bz2..xz.不过tar命令已经可以满足大部分使用,所以这些格式只简单了解一下.gzip压缩速度最快,xz压缩率最高,bz2适中.一般这三 ...
