Office プログラミングで名前付き引数と省略可能な引数を使用する方法
名前付き引数と省略可能な引数を使うと、C# プログラミングの便利さ、柔軟性、読みやすさが向上します。 さらに、Microsoft Office オートメーション API などの COM インターフェイスへのアクセスが大幅に楽になります。
重要
VSTO (Visual Studio Tools for Office) は、.NET Framework に依存しています。 COM アドインも .NET Framework を使用して記述することができます。 Office アドインは、.NET Core と .NET 5+ (.NET の最新バージョン) では作成できません。 これは、.NET Core と .NET 5+ を .NET Framework と同じプロセスで動作させることができず、アドインの読み込みエラーが発生する可能性があるためです。 引き続き .NET Framework を使用して、Office 用の VSTO アドインと COM アドインを記述できます。 Microsoft が VSTO または COM アドイン プラットフォームを、.NET Core または .NET 5+ を使用するように更新することはありません。 .NET Core と .NET 5+ (ASP.NET Core を含む) を利用して、Office Web アドインのサーバー側を作成できます。
次の例の ConvertToTable メソッドには、列と行の数、書式設定、罫線、フォント、色など、テーブルの特性を表す 16 個のパラメーターがあります。 ほとんどの場合はこれらすべてに具体的な値を指定する必要はないので、16 個のパラメーターはすべて省略可能です。 しかし、名前付き引数や省略可能な引数を使わないと、値またはプレースホルダー値を指定する必要があります。 名前付き引数や省略可能な引数を使うと、プロジェクトに必要なパラメーターの値だけを指定できます。
以下の手順を行うには、Microsoft Office Word がコンピューターにインストールされている必要があります。
注意
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「IDE をカスタマイズする」をご覧ください。
新しいコンソール アプリケーションを作成する
Visual Studio を起動します。 [ファイル] メニューの [新規作成]をポイントし、 [プロジェクト]をクリックします。 [Templates Categories] (テンプレート カテゴリ) ペインで [C#] を展開し、[Windows] を選択します。 [テンプレート] ウィンドウの上部で、 [ターゲット フレームワーク] ボックスに [.NET Framework 4] が表示されていることを確認します。 [テンプレート] ペインで [コンソール アプリケーション] をクリックします。 [名前] フィールドに、プロジェクトの名前を入力します。 [OK] を選択します。 ソリューション エクスプローラーに新しいプロジェクトが表示されます。
参照を追加する
ソリューション エクスプローラーで、プロジェクトの名前を右クリックし、[参照の追加] を選択します。 [参照の追加] ダイアログ ボックスが表示されます。 [.NET] ページの [コンポーネント名] の一覧で、Microsoft.Office.Interop.Word を選びます。 [OK] を選択します。
ディレクティブを使用して必要なものを追加する
ソリューション エクスプローラーで、Program.cs ファイルを右クリックし、[コードの表示] を選択します。 次の using
ディレクティブをコード ファイルの先頭に追加します。
using Word = Microsoft.Office.Interop.Word;
Word 文書にテキストを表示する
Program.cs の Program
クラスに、Word アプリケーションと Word 文書を作成する次のメソッドを追加します。 Add メソッドには、4 つの省略可能なパラメーターがあります。 この例では、それらの既定値を使います。 そのため、呼び出しステートメントに引数は必要ありません。
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. . .");
アプリケーションの実行
次のステートメントを Main に追加します。
DisplayInWord();
CTRL+F5 を押してプロジェクトを実行します。 指定したテキストを含む Word 文書が表示されます。
テキストをテーブルに変更する
ConvertToTable
メソッドを使って、テーブル内のテキストを囲みます。 このメソッドには、16 個の省略可能なパラメーターがあります。 次の例に示すように、IntelliSense では省略可能なパラメーターは角かっこで囲まれています。 Type.Missing
の既定値は、System.Type.Missing
の単純な名前です。
名前付きの省略可能な引数を使うと、変更するパラメーターの値だけを指定できます。 DisplayInWord
メソッドの最後に次のコードを追加して、テーブルを作成します。 この引数は、range
内のテキスト文字列のコンマがテーブルのセルを区切ることを指定します。
// Convert to a simple table. The table will have a single row with
// three columns.
range.ConvertToTable(Separator: ",");
CTRL+F5 を押してプロジェクトを実行します。
他のパラメーターを試す
テーブルを 1 列 3 行に変更するには、DisplayInWord
の最後の行を次のステートメントに置き換えてから、CTRL+F5 キーを押します。
range.ConvertToTable(Separator: ",", AutoFit: true, NumColumns: 1);
テーブルに対して定義済みの書式を指定するには、DisplayInWord
の最後の行を次のステートメントに置き換えてから、CTRL+F5 キーを押します。 書式には、WdTableFormat 定数のどれでも指定できます。
range.ConvertToTable(Separator: ",", AutoFit: true, NumColumns: 1,
Format: Word.WdTableFormat.wdTableFormatElegant);
例
ここまでの例をすべて含んだコードを次に示します。
using System;
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);
}
}
}
.NET