演练:嵌入 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 版本环境下工作的应用程序

  1. 在安装有 Excel 的计算机上,启动 Visual Studio。

  2. 在**“文件”菜单上,选择“新建”“项目”**。

  3. 在**“新建项目”对话框的“项目类型”窗格中,确保选中“Windows”。 在“模板”窗格中,选择“控制台应用程序”**。 在“名称”框中,输入“CreateExcelWorkbook”,然后选中“确定”按钮。 至此新项目创建完毕。

  4. 如果您正在使用 Visual Basic,请打开 CreateExcelWorkbook 项目的快捷菜单,然后选择“属性”。 选择“引用”选项卡。 选择**“添加”**按钮。 如果使用的是 Visual C#,在“解决方案资源管理器”中,打开“引用”文件夹的快捷菜单,然后选择“添加引用”。

  5. 在“.NET”选项卡上,选择最新版本的 Microsoft.Office.Interop.Excel。 例如,“Microsoft.Office.Interop.Excel 14.0.0.0”。 选择**“确定”**按钮。

  6. 在 CreateExcelWorkbook 项目的引用列表中,选择上一步添加的 Microsoft.Office.Interop.Excel 引用。 在**“属性”**窗口中,确保 Embed Interop Types 属性已设置为 True。

    备注

    由于嵌入的互操作类型信息,本演练中创建的应用程序将以不同的 Microsoft Office 版本运行。如果 Embed Interop Types 属性设置为 False,则必须为应用程序以后运行时使用的每个 Microsoft Office 版本包括一个 PIA。

  7. 如果使用的是 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;
                }
            }
        }
    }
    
  8. 保存项目。

  9. 按 Ctrl+F5 生成和运行项目。 确认在代码示例中指定的位置处,已创建了 Excel 工作簿:C:\SampleFolder\SampleWorkbook.xls。

将应用程序发布到安装有另一个 Microsoft Office 版本的计算机

  1. 在 Visual Studio 中,打开此演练创建的项目。

  2. 在“生成”菜单上,选择“发布 CreateExcelWorkbook”。 按照发布向导的步骤进行操作,创建应用程序的可安装版本。 有关详细信息,请参阅 发布向导(Visual Studio 中的 Office 开发)

  3. 在安装有 .NET Framework 4 和另一个 Excel 版本的计算机上,安装该应用程序。

  4. 安装完成后,运行安装的程序。

  5. 确认在代码示例中指定的位置处,已创建了 Excel 工作簿:C:\SampleFolder\SampleWorkbook.xls。

请参见

任务

演练:嵌入托管程序集中的类型(C# 和 Visual Basic)

参考

/link (Visual Basic)

/link(C# 编译器选项)