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-9 生成的Excel文档
图 28-10 生成的Word文档