如何:在 Office 编程中使用命名参数和可选参数(C# 编程指南)

在 Visual C# 2010 中引入的命名参数和可选参数增强了 C# 编程中的便利性、灵活性和可靠性。另外,这些功能显著方便了对 COM 接口(如 Microsoft Office 自动化 API)的访问。

在下面的示例中,方法 ConvertToTable 具有十六个参数,用于表示表的各种特性,例如列数和行数、格式设置、边框、字体以及颜色。 由于大多数时候您都不需要为所有十六个参数指定特定值,因此所有这些参数都是可选的。 但是,如果没有命名实参和可选实参,则必须为每个形参提供值或占位符值。 有了命名实参和可选实参,则只需为项目所需的形参指定值。

必须在您的计算机上安装 Microsoft Office Word 才能完成这些过程。

提示

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置

创建新的控制台应用程序

  1. 启动 Visual Studio。

  2. 在**“文件”菜单上指向“新建”,再单击“项目”**。

  3. 在**“模板类别”窗格中,展开“Visual C#”,然后单击“Windows”**。

  4. 查看**“模板”窗格的顶部以确保“.NET Framework 4”显示在“目标 Framework”**框中。

  5. 在**“模板”窗格中单击“控制台应用程序”**。

  6. 在**“名称”**字段中键入项目的名称。

  7. 单击**“确定”**。

    新项目出现在**“解决方案资源管理器”**中。

添加引用

  1. 在**“解决方案资源管理器”中,右击项目的名称,然后单击“添加引用”。 此时将出现“添加引用”**对话框。

  2. 在**“.NET”页上的“组件名称”列表中,选择“Microsoft.Office.Interop.Word”**。

  3. 单击**“确定”**。

添加必要的 using 指令

  1. 在**“解决方案资源管理器”中,右击“Program.cs”文件,然后单击“查看代码”**。

  2. 将以下 using 指令添加到代码文件的顶部。

    using Word = Microsoft.Office.Interop.Word;
    

在 Word 文档中显示文本

  1. 在 Program.cs 的 Program 类中,添加以下方法以创建 Word 应用程序和 Word 文档。 Add 方法具有四个可选参数。 此示例使用这些参数的默认值。 因此,调用语句中不必有参数。

    static void DisplayInWord()
    {
        var wordApp = new Word.Application();
        wordApp.Visible = true;
        // docs is a collection of all the Document objects currently 
        // open in Word.
        Word.Documents docs = wordApp.Documents;
    
        // Add a document to the collection and name it doc. 
        Word.Document doc = docs.Add();
    }
    
  2. 将以下代码添加到方法的末尾,以定义要在何处显示文档中的文本,以及要显示什么文本。

    // Define a range, a contiguous area in the document, by specifying
    // a starting and ending character position. Currently, the document
    // is empty.
    Word.Range range = doc.Range(0, 0);
    
    // Use the InsertAfter method to insert a string at the end of the
    // current range.
    range.InsertAfter("Testing, testing, testing. . .");
    

运行应用程序

  1. 将以下语句添加到 Main。

    DisplayInWord();
    
  2. 按 Ctrl+F5 运行项目。 此时将出现一个 Word 文档,其中包含指定的文本。

将文本更改为表

  1. 使用 ConvertToTable 方法将文本放入表中。 该方法具有十六个可选参数。 IntelliSense 将可选参数放入括号中,如下图所示。

    ConvertToTable 参数

    ConvertToTable 方法的参数列表。

    通过使用命名实参和可选实参,您可以只对要更改的形参指定值。 将以下代码添加到方法 DisplayInWord 的末尾以创建一个简单的表。 此参数指定 range 中文本字符串内的逗号分隔表的各个单元格。

    // Convert to a simple table. The table will have a single row with
    // three columns.
    range.ConvertToTable(Separator: ",");
    

    在 C# 早期版本中,对 ConvertToTable 的调用需要对每个形参使用引用实参,如以下代码所示。

    // Call to ConvertToTable in Visual C# 2008 or earlier. This code
    // is not part of the solution.
    var missing = Type.Missing;
    object separator = ",";
    range.ConvertToTable(ref separator, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing,
        ref missing);
    
  2. 按 Ctrl+F5 运行项目。

试验其他参数

  1. 若要更改表以使其具有一列三行,请将 DisplayInWord 中的最后一行替换为以下语句,然后按 Ctrl+F5。

    range.ConvertToTable(Separator: ",", AutoFit: true, NumColumns: 1);
    
  2. 若要为表指定预定义的格式,请将 DisplayInWord 中的最后一行替换为以下语句,然后按 Ctrl+F5。 格式可以为任何 WdTableFormat 常量。

    range.ConvertToTable(Separator: ",", AutoFit: true, NumColumns: 1,
        Format: Word.WdTableFormat.wdTableFormatElegant);
    

示例

下面的代码包括完整的示例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Word = Microsoft.Office.Interop.Word;


namespace OfficeHowTo
{
    class WordProgram
    {
        static void Main(string[] args)
        {
            DisplayInWord();
        }

        static void DisplayInWord()
        {
            var wordApp = new Word.Application();
            wordApp.Visible = true;
            // docs is a collection of all the Document objects currently 
            // open in Word.
            Word.Documents docs = wordApp.Documents;

            // Add a document to the collection and name it doc. 
            Word.Document doc = docs.Add();

            // Define a range, a contiguous area in the document, by specifying
            // a starting and ending character position. Currently, the document
            // is empty.
            Word.Range range = doc.Range(0, 0);

            // Use the InsertAfter method to insert a string at the end of the
            // current range.
            range.InsertAfter("Testing, testing, testing. . .");

            // You can comment out any or all of the following statements to
            // see the effect of each one in the Word document.

            // Next, use the ConvertToTable method to put the text into a table. 
            // The method has 16 optional parameters. You only have to specify
            // values for those you want to change.

            // Convert to a simple table. The table will have a single row with
            // three columns.
            range.ConvertToTable(Separator: ",");

            // Change to a single column with three rows..
            range.ConvertToTable(Separator: ",", AutoFit: true, NumColumns: 1);

            // Format the table.
            range.ConvertToTable(Separator: ",", AutoFit: true, NumColumns: 1,
                Format: Word.WdTableFormat.wdTableFormatElegant);
        }
    }
}

请参见

概念

命名实参和可选实参(C# 编程指南)