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

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

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

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

注意

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 IDE

创建新的控制台应用程序

  1. 启动 Visual Studio。

  2. “文件” 菜单上,指向 “新建” ,然后单击 “项目”

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

  4. 查看“模板”窗格的顶部,确保“.NET Framework 4”出现在“目标框架”框中。

  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 方法的参数列表

    通过使用命名实参和可选实参,可以只对要更改的形参指定值。 将以下代码添加到方法 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);
        }
    }
}

请参阅