28.3 完整示例

接下来是上述示例的完整代码,内容为:

❑新建一份Excel文档,并在Excel的工作簿中添加一系列数据;

❑新建一份Word文档,然后把Excel文档的内容复制到Word文档中,并使用图标的形式粘贴。

如代码清单28-11所示。

代码清单28-11 改进的COM Interop完整示例代码


using System;

using Excel=Microsoft.Office.Interop.Excel;

using Word=Microsoft.Office.Interop.Word;

using System.Collections.Generic;

namespace ProgrammingCSharp4

{

class COMInteropSample

{

public static void Main()

{

var bankAccounts=new List<Account>{

new Account{

ID=345678,

Balance=541.27

},

new Account{

ID=1230221,

Balance=-127.44

}

};

//在Excel的工作簿中显示数据

DisplayInExcel(bankAccounts);

CreateIconInWordDoc();

}

static void DisplayInExcel(IEnumerable<Account>accounts)

{

var excelApp=new Excel.Application();

//显示Excel应用程序窗口

excelApp.Visible=true;

//创建一个新的、空的工作簿,新的工作簿成为当前活动的工作簿

//Add方法有一个可选参数用以指定一个模板

//在本例中没有为参数赋值,于是Add方法创建一个新的工作簿

excelApp.Workbooks.Add();

//本例使用单个的工作表,显式的类型转换已经不需要了

Excel._Worksheet workSheet=(Excel.Worksheet)excelApp.ActiveSheet;

//在单元格A1和B1建立列标题

workSheet.Cells[1,"A"]="ID Number";

workSheet.Cells[1,"B"]="Current Balance";

//为两列赋值

var row=1;

foreach(var acct in accounts)

{

row++;

workSheet.Cells[row,"A"]=acct.ID;

workSheet.Cells[row,"B"]=acct.Balance;

}

//动态类型免去了显式类型转换

workSheet.Columns[1].AutoFit();

workSheet.Columns[2].AutoFit();

//将Excel中的所有数据赋值到剪贴板,Copy方法有一个可选参数

//用以指定一个目的地,因为没有为参数赋值,那么默认赋值到

//的目的地是剪贴板

workSheet.Range["A1:B3"].Copy();

}

static void CreateIconInWordDoc()

{

var wordApp=new Word.Application();

wordApp.Visible=true;

//Add方法有4个引用参数,全部都是可选参数,如果它们的默认值

//正是你想要的,那么C#4.0允许你忽略它们

wordApp.Documents.Add();

//PasteSpecial方法有7个引用参数,每个都是可选的,本例为其

//中的2个参数使用参数名来指定参数值。虽然这些是引用参数,但

//没必要使用ref关键字,或者创建一个变量然后作为参数传递,可

//以直接赋值

wordApp.Selection.PasteSpecial(Link:true,DisplayAsIcon:true);

}

}

//账户类

public class Account

{

public int ID{get;set;}

public double Balance{get;set;}

}

}


上述代码的运行结果见图28-9和图28-10。

28.3 完整示例 - 图1

图 28-9 生成的Excel文档

28.3 完整示例 - 图2

图 28-10 生成的Word文档