演练:嵌入 Microsoft Office 程序集中的类型信息(C# 和 Visual Basic)
如果您在引用 COM 对象的应用程序中嵌入类型信息,则可以不需要主互操作程序集 (PIA)。 此外,利用嵌入的类型信息可实现应用程序的版本中立性。 即,可以将程序编写为使用多个 COM 库版本中的多个类型,而不是每个版本都需要一个特定的 PIA。 对于使用 Microsoft Office 库中对象的应用程序,这是一种常用方案。 嵌入类型信息后,程序的同一个生成可以使用不同计算机上的不同 Microsoft Office 版本,而无需为 Microsoft Office 的每个版本重新部署该程序或 PIA。
在本演练中,您将执行以下任务:
将应用程序发布到安装有另一个 Microsoft Office 版本的计算机。
将应用程序发布到安装有另一个 Microsoft Office 版本的计算机。
备注
以下说明中的某些 Visual Studio 用户界面元素在你计算机上的名称或显示位置可能有所不同。这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。有关详细信息,请参阅 在 Visual Studio 中自定义开发设置。
系统必备
本演练需要如下内容:
安装有 Visual Studio 和 Microsoft Excel 的计算机。
安装有 .NET Framework 4 和不同版本 Excel 的另一计算机。
创建在多个 Microsoft Office 版本环境下工作的应用程序
在安装有 Excel 的计算机上,启动 Visual Studio。
在**“文件”菜单上,选择“新建”和“项目”**。
在**“新建项目”对话框的“项目类型”窗格中,确保选中“Windows”。 在“模板”窗格中,选择“控制台应用程序”**。 在“名称”框中,输入“CreateExcelWorkbook”,然后选中“确定”按钮。 至此新项目创建完毕。
如果您正在使用 Visual Basic,请打开 CreateExcelWorkbook 项目的快捷菜单,然后选择“属性”。 选择“引用”选项卡。 选择**“添加”**按钮。 如果使用的是 Visual C#,在“解决方案资源管理器”中,打开“引用”文件夹的快捷菜单,然后选择“添加引用”。
在“.NET”选项卡上,选择最新版本的 Microsoft.Office.Interop.Excel。 例如,“Microsoft.Office.Interop.Excel 14.0.0.0”。 选择**“确定”**按钮。
在 CreateExcelWorkbook 项目的引用列表中,选择上一步添加的 Microsoft.Office.Interop.Excel 引用。 在**“属性”**窗口中,确保 Embed Interop Types 属性已设置为 True。
备注
由于嵌入的互操作类型信息,本演练中创建的应用程序将以不同的 Microsoft Office 版本运行。如果 Embed Interop Types 属性设置为 False,则必须为应用程序以后运行时使用的每个 Microsoft Office 版本包括一个 PIA。
如果使用的是 Visual Basic,请打开 Module1.vb 文件。 如果使用的是 Visual C#,请打开 Program.cs 文件。 用下面的代码替换文件中的代码。
Imports Excel = Microsoft.Office.Interop.Excel Module Module1 Sub Main() Dim values = {4, 6, 18, 2, 1, 76, 0, 3, 11} CreateWorkbook(values, "C:\SampleFolder\SampleWorkbook.xls") End Sub Sub CreateWorkbook(ByVal values As Integer(), ByVal filePath As String) Dim excelApp As Excel.Application = Nothing Dim wkbk As Excel.Workbook Dim sheet As Excel.Worksheet Try ' Start Excel and create a workbook and worksheet. excelApp = New Excel.Application wkbk = excelApp.Workbooks.Add() sheet = CType(wkbk.Sheets.Add(), Excel.Worksheet) sheet.Name = "Sample Worksheet" ' Write a column of values. ' In the For loop, both the row index and array index start at 1. ' Therefore the value of 4 at array index 0 is not included. For i = 1 To values.Length - 1 sheet.Cells(i, 1) = values(i) Next ' Suppress any alerts and save the file. Create the directory ' if it does not exist. Overwrite the file if it exists. excelApp.DisplayAlerts = False Dim folderPath = My.Computer.FileSystem.GetParentPath(filePath) If Not My.Computer.FileSystem.DirectoryExists(folderPath) Then My.Computer.FileSystem.CreateDirectory(folderPath) End If wkbk.SaveAs(filePath) Catch Finally sheet = Nothing wkbk = Nothing ' Close Excel. excelApp.Quit() excelApp = Nothing End Try End Sub End Module
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using Excel = Microsoft.Office.Interop.Excel; namespace CreateExcelWorkbook { class Program { static void Main(string[] args) { int[] values = {4, 6, 18, 2, 1, 76, 0, 3, 11}; CreateWorkbook(values, @"C:\SampleFolder\SampleWorkbook.xls"); } static void CreateWorkbook(int[] values, string filePath) { Excel.Application excelApp = null; Excel.Workbook wkbk; Excel.Worksheet sheet; try { // Start Excel and create a workbook and worksheet. excelApp = new Excel.Application(); wkbk = excelApp.Workbooks.Add(); sheet = wkbk.Sheets.Add() as Excel.Worksheet; sheet.Name = "Sample Worksheet"; // Write a column of values. // In the For loop, both the row index and array index start at 1. // Therefore the value of 4 at array index 0 is not included. for (int i = 1; i < values.Length; i++) { sheet.Cells[i, 1] = values[i]; } // Suppress any alerts and save the file. Create the directory // if it does not exist. Overwrite the file if it exists. excelApp.DisplayAlerts = false; string folderPath = Path.GetDirectoryName(filePath); if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } wkbk.SaveAs(filePath); } catch { } finally { sheet = null; wkbk = null; // Close Excel. excelApp.Quit(); excelApp = null; } } } }
保存项目。
按 Ctrl+F5 生成和运行项目。 确认在代码示例中指定的位置处,已创建了 Excel 工作簿:C:\SampleFolder\SampleWorkbook.xls。
将应用程序发布到安装有另一个 Microsoft Office 版本的计算机
在 Visual Studio 中,打开此演练创建的项目。
在“生成”菜单上,选择“发布 CreateExcelWorkbook”。 按照发布向导的步骤进行操作,创建应用程序的可安装版本。 有关详细信息,请参阅 发布向导(Visual Studio 中的 Office 开发)。
在安装有 .NET Framework 4 和另一个 Excel 版本的计算机上,安装该应用程序。
安装完成后,运行安装的程序。
确认在代码示例中指定的位置处,已创建了 Excel 工作簿:C:\SampleFolder\SampleWorkbook.xls。
请参见
任务
演练:嵌入托管程序集中的类型(C# 和 Visual Basic)