服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

VC#.NET绑定Office自动化服务器


发布日期:2020年06月04日
 
VC#.NET绑定Office自动化服务器

早期绑定

采用早期绑定时Visual C# 使用有关所涉及的 Office 应用程序的可用类型信息直接绑定到它需要使用的方法或属性编译器可以执行类型和语法检查以确保传递到方法或属性的参数的数量和类型正确无误并且返回的值是所期望的类型 由于早期绑定在运行时调用属性或方法所需的工作量较小因此有时速度较快然而虽然早期绑定可能速度较快但与晚期绑定之间的性能差异通常不大

早期绑定确实有这样一个小缺点可能会带来版本兼容性问题例如假定诸如 Microsoft Excel 之类的自动化服务器引入了 Excel 中没有的新方法或属性或者更改了现有的属性或方法这些更改可能会改变对象的二进制布局并导致使用 Excel 类型信息实现 Excel 自动化的 Visual C# 应用程序出现问题为了避免早期绑定发生这样的问题通常建议您在开发和测试自动化客户端时使用您希望支持的最低版本的 Office 应用程序的类型信息

下列步骤说明了如何创建使用早期绑定的自动化客户端请注意正如这些步骤所说明的那样早期绑定要求您引用自动化客户端的类型库

创建使用早期绑定的自动化客户端

启动 Microsoft Visual Studio NET在文件菜单上单击新建然后单击项目从 Visual C# 项目类型中选择 Windows 应用程序默认情况下会创建 Form

添加对 Microsoft Excel 对象库的引用为此请按照下列步骤操作

在项目菜单上单击添加引用

在 COM 选项卡上找到 Microsoft Excel 对象库并单击选择

注意Office 包含主 Interop 程序集 (PIA)Office XP 不包含 PIA但您可以下载 PIA 有关 Office XP PIA 的其他信息请单击下面的文章编号以查看 Microsoft 知识库中相应的文章

INFOMicrosoft Office XP PIA 可供下载  

在添加引用对话框中单击确定以接受您的选择如果系统提示您为选定的库生成包装请单击是

在视图菜单上选择工具箱以显示工具箱然后向 Form 添加一个按钮

双击 Button将出现该窗体的代码窗口

在代码窗口中将以下代码private void button_Click(object sender SystemEventArgs e)

{

}

替换为 private void button_Click(object sender SystemEventArgs e)

{

ExcelApplication objApp;

Excel_Workbook objBook;

ExcelWorkbooks objBooks;

ExcelSheets objSheets;

Excel_Worksheet objSheet;

ExcelRange range;

try

{

// Instantiate Excel and start a new workbook

objApp = new ExcelApplication();

objBooks = objAppWorkbooks;

objBook = objBooksAdd( MissingValue );

objSheets = objBookWorksheets;

objSheet = (Excel_Worksheet)objSheetsget_Item();

range = objSheetget_Range(A MissingValue);

rangeset_Value(MissingValue Hello World! ); //Return control of Excel to the user

objAppVisible = true;

objAppUserControl = true;

}

catch( Exception theException )

{

String errorMessage;

errorMessage = Error: ;

errorMessage = StringConcat( errorMessage theExceptionMessage );

errorMessage = StringConcat( errorMessage Line: );

errorMessage = StringConcat( errorMessage theExceptionSource );

MessageBoxShow( errorMessage Error );

}

}

滚动到代码窗口的顶部将下面的代码行添加到 using 指令列表的末尾using SystemReflection;

using Excel = MicrosoftOfficeInteropExcel;

晚期绑定

与早期绑定不同晚期绑定要等到运行时才会将属性和方法调用绑定到它们的对象为此目标对象必须实现一个特殊的 COM 接口IDispatch利用 IDispatch::GetIDsOfNames 方法Visual C# 可以询问对象支持哪些方法和属性然后IDispatch::Invoke 方法允许 Visual C# 调用这些方法和属性这种晚期绑定的优点是它消除了早期绑定所固有的某些版本依赖性然而它也有以下缺点省略了对自动化代码完整性的编译时检查也不提供智能感知功能(该功能可提供有助于正确调用方法和属性的提示)

要在 Visual C# 中使用晚期绑定请使用 SystemTypeInvokeMember 方法此方法调用 IDispatch::GetIDsOfNames 和 IDispatch::Invoke 来绑定到自动化服务器的方法和属性

创建使用晚期绑定的自动化客户端

启动 Microsoft Visual Studio NET在文件菜单上单击新建然后单击项目从 Visual C# 项目类型中选择 Windows 应用程序默认情况下会创建 Form

在视图菜单上选择工具箱以显示工具箱然后向 Form 添加一个按钮

双击 Button将出现该窗体的代码窗口

在代码窗口中将以下代码 private void button_Click(object sender SystemEventArgs e)

{

}

替换为private void button_Click(object sender SystemEventArgs e)

{

object objApp_Late;

object objBook_Late;

object objBooks_Late;

object objSheets_Late;

object objSheet_Late;

object objRange_Late;

object[] Parameters;

try

{

// Instantiate Excel

objApp_Late = (object)new ExcelApplication();

//Get the workbooks collection

objBooks_Late = objApp_LateGetType()InvokeMember( Workbooks

BindingFlagsGetProperty null objApp_Late null );

//Add a new workbook

objBook_Late = objBooks_LateGetType()InvokeMember( Add

BindingFlagsInvokeMethod null objBooks_Late null );

//Get the worksheets collection

objSheets_Late = objBook_LateGetType()InvokeMember( Worksheets

BindingFlagsGetProperty null objBook_Late null );

//Get the first worksheet

Parameters = new Object[];

Parameters[] = ;

objSheet_Late = objSheets_LateGetType()InvokeMember( Item

BindingFlagsGetProperty null objSheets_Late Parameters );

//Get a range object that contains cell A

Parameters = new Object[];

Parameters[] = A;

Parameters[] = MissingValue;

objRange_Late = objSheet_LateGetType()InvokeMember( Range

BindingFlagsGetProperty null objSheet_Late Parameters ); //Write Hello World! in cell A

Parameters = new Object[];

Parameters[] = Hello World!;

objRange_LateGetType()InvokeMember( Value BindingFlagsSetProperty

null objRange_Late Parameters );

//Return control of Excel to the user

Parameters = new Object[];

Parameters[] = true;

objApp_LateGetType()InvokeMember( Visible BindingFlagsSetProperty

null objApp_Late Parameters );

objApp_LateGetType()InvokeMember( UserControl BindingFlagsSetProperty

null objApp_Late Parameters );

}

catch( Exception theException )

{

String errorMessage;

errorMessage = Error: ;

errorMessage = StringConcat( errorMessage theExceptionMessage );

errorMessage = StringConcat( errorMessage Line: );

errorMessage = StringConcat( errorMessage theExceptionSource );

MessageBoxShow( errorMessage Error );

}

}

滚动到代码窗口的顶部将下面的代码行添加到 using 指令列表的末尾using SystemReflection;

               

上一篇:Asp.Mvc 2.0用户登录实例讲解:服务器端验证

下一篇:ASP.NET - TreeView Web 服务器控件概述