このチュートリアルでは、コンテンツ コントロールを使用して、Microsoft Office Word テンプレートで構造化された再利用可能なコンテンツを作成するドキュメント レベルのカスタマイズを作成する方法について説明します。
適用対象: このトピックの情報は、Word のドキュメント レベルのプロジェクトに適用されます。 詳細については、「 Office アプリケーションとプロジェクトの種類で使用できる機能」を参照してください。
Word では、文書パーツという名前の再利用可能なドキュメント パーツのコレクション を作成できます。 このチュートリアルでは、2 つのテーブルを構成要素として作成する方法について説明します。 各テーブルには、プレーン テキストや日付など、さまざまな種類のコンテンツを保持できる複数のコンテンツ コントロールが含まれています。 1 つのテーブルには従業員に関する情報が含まれており、もう 1 つのテーブルには顧客からのフィードバックが含まれています。
テンプレートからドキュメントを作成した後、テンプレートで使用可能な文書パーツを表示する複数の BuildingBlockGalleryContentControl オブジェクトを使用して、いずれかのテーブルをドキュメントに追加できます。
このチュートリアルでは、次の作業について説明します。
デザイン時に Word テンプレートのコンテンツ コントロールを含むテーブルを作成する。
コンボ ボックス コンテンツ コントロールとドロップダウン リスト コンテンツ コントロールをプログラムで設定する。
ユーザーが指定したテーブルを編集できないようにする。
テンプレートのビルディング ブロック コレクションにテーブルを追加する。
テンプレートで使用可能な文書パーツを表示するコンテンツ コントロールを作成する。
注
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。
[前提条件]
このチュートリアルを実行するには、次のコンポーネントが必要です。
Microsoft Office 開発者ツールを含む Visual Studio のエディション。 詳細については、「 Office ソリューションを開発するためのコンピューターの構成」を参照してください。
Microsoft Word。
新しい Word テンプレート プロジェクトを作成する
ユーザーが自分のコピーを簡単に作成できるように、Word テンプレートを作成します。
新しい Word テンプレート プロジェクトを作成するには
MyBuildingBlockTemplate という名前の Word テンプレート プロジェクトを作成します。 ウィザードで、ソリューションに新しいドキュメントを作成します。 詳細については、「 方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
Visual Studio がデザイナーで新しい Word テンプレートを開き、 MyBuildingBlockTemplate プロジェクトを ソリューション エクスプローラーに追加します。
従業員テーブルを作成する
ユーザーが従業員に関する情報を入力できる 4 種類のコンテンツ コントロールを含むテーブルを作成します。
従業員テーブルを作成するには
Visual Studio デザイナーでホストされている Word テンプレートのリボンで、[ 挿入 ] タブをクリックします。
[ テーブル ] グループで [ テーブル] をクリックし、2 つの列と 4 つの行を含むテーブルを挿入します。
最初の列に次の列のようなテキストを入力します。
従業員名 採用日 タイトル Picture 2 番目の列の最初のセル ( [従業員名] の横) をクリックします。
リボンの [ 開発 ] タブをクリックします。
注
[開発] タブが表示されない場合は、最初に表示する必要があります。 詳細については、「 方法: リボンの [開発者] タブを表示する」を参照してください。
[コントロール] グループで、[テキスト] ボタン
] をクリックして、最初のセルにPlainTextContentControlを追加します。2 番目の列の 2 番目のセルをクリックします ([ 採用日] の横)。
[コントロール] グループで、[日付の選択] ボタン
をクリックして、2 番目のセルにDatePickerContentControlを追加します。2 番目の列の 3 番目のセル ( [タイトル] の横) をクリックします。
[コントロール] グループで、[コンボ ボックス] ボタン
をクリックして、3 番目のセルにComboBoxContentControlを追加します。2 番目の列の最後のセル ( [図] の横) をクリックします。
[コントロール] グループで、[Picture Content Control] ボタン
をクリックして、最後のセルにPictureContentControlを追加します。
顧客フィードバック テーブルを作成する
ユーザーが顧客フィードバック情報を入力できる 3 種類のコンテンツ コントロールを含むテーブルを作成します。
顧客フィードバック テーブルを作成するには
Word テンプレートで、前に追加した従業員テーブルの後の行をクリックし、 Enter キーを押して新しい段落を追加します。
リボンの [ 挿入 ] タブをクリックします。
[ テーブル ] グループで [ テーブル] をクリックし、2 つの列と 3 つの行を含むテーブルを挿入します。
最初の列に次の列のようなテキストを入力します。
顧客名 満足度評価 コメント 2 番目の列の最初のセル ( [顧客名] の横) をクリックします。
リボンの [ 開発 ] タブをクリックします。
[コントロール] グループで、[テキスト] ボタン
] をクリックして、最初のセルにPlainTextContentControlを追加します。2 番目の列の 2 番目のセルをクリックします ( [満足度評価] の横)。
[コントロール] グループで、[Drop-Down リスト] ボタン
をクリックして、2 番目のセルにDropDownListContentControlを追加します。2 番目の列の最後のセル ( [コメント] の横) をクリックします。
[コントロール] グループで、[リッチ テキスト] ボタン
] をクリックして、最後のセルにRichTextContentControlを追加します。
コンボ ボックスとドロップダウン リストにプログラムでデータを追加する
Visual Studio の [プロパティ] ウィンドウを使用して、デザイン時にコンテンツ コントロールを初期化できます。 また、実行時に初期化することもできます。これにより、初期状態を動的に設定できます。 この手順では、コードを使って実行時に ComboBoxContentControl と DropDownListContentControl のエントリを設定し、これらのオブジェクトがどのように動作するかを確認します。
プログラムでコンテンツ コントロールの UI を変更するには
ソリューション エクスプローラーで、ThisDocument.csまたはThisDocument.vbを右クリックし、[コードの表示] をクリックします。
ThisDocumentクラスに次のコードを追加します。 このコードでは、このチュートリアルの後半で使用するいくつかのオブジェクトを宣言します。ThisDocument_StartupクラスのThisDocumentメソッドに次のコードを追加します。 このコードは、テーブル内の ComboBoxContentControl と DropDownListContentControl にエントリを追加し、ユーザーが編集する前にこれらの各コントロールに表示されるプレースホルダー テキストを設定します。comboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own"; comboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0); comboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1); comboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2); dropDownListContentControl1.PlaceholderText = "Choose a rating (1 lowest, 3 highest)"; dropDownListContentControl1.DropDownListEntries.Add("1", "1", 0); dropDownListContentControl1.DropDownListEntries.Add("2", "2", 1); dropDownListContentControl1.DropDownListEntries.Add("3", "3", 2);
ユーザーが従業員テーブルを編集できないようにする
従業員テーブルを保護するには、前に宣言した GroupContentControl オブジェクトを使用します。 テーブルを保護した後も、ユーザーはテーブル内のコンテンツ コントロールを編集できます。 ただし、最初の列のテキストを編集したり、行や列の追加や削除などの他の方法でテーブルを変更したりすることはできません。 GroupContentControlを使用してドキュメントの一部を保護する方法の詳細については、「コンテンツ コントロール」を参照してください。
ユーザーが従業員テーブルを編集できないようにするには
前の手順で追加したコードの後に、
ThisDocument_StartupクラスのThisDocumentメソッドに次のコードを追加します。 このコードにより、前に宣言した GroupContentControl オブジェクト内にテーブルを配置することで、ユーザーが従業員テーブルを編集できなくなります。
ビルディングブロックコレクションにテーブルを追加する
作成したテーブルをユーザーがドキュメントに挿入できるように、テンプレート内のドキュメント文書パーツのコレクションにテーブルを追加します。 ドキュメント構成要素の詳細については、「 コンテンツ コントロール」を参照してください。
テンプレートの構成要素にテーブルを追加するには
前の手順で追加したコードの後に、
ThisDocument_StartupクラスのThisDocumentメソッドに次のコードを追加します。 このコードは、テーブルを含む新しい文書パーツを Microsoft.Office.Interop.Word.BuildingBlockEntries コレクションに追加します。このコレクションには、テンプレート内のすべての再利用可能な構成要素が含まれています。 新しい文書パーツは 、Employee と Customer Information という名前の新しいカテゴリで定義され、文書パーツの種類Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1割り当てられます。Word.Template template1 = this.AttachedTemplate as Word.Template; if (template1 != null) { object description = null; template1.BuildingBlockEntries.Add("Employee Table", Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[1].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent); template1.BuildingBlockEntries.Add("Customer Table", Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[2].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent); }前の手順で追加したコードの後に、
ThisDocument_StartupクラスのThisDocumentメソッドに次のコードを追加します。 このコードは、テンプレートからテーブルを削除します。 テンプレート内の再利用可能な構成要素のギャラリーにテーブルを追加したため、テーブルは不要です。 コードは、保護された従業員テーブルを削除できるように、最初にドキュメントをデザイン モードにします。
ブロックを表示するコンテンツ コントロールを作成する
前に作成した構成要素 (つまりテーブル) へのアクセスを提供するコンテンツ コントロールを作成します。 ユーザーはこのコントロールをクリックして、ドキュメントにテーブルを追加できます。
ビルディング ブロックを表示するコンテンツ コントロールを作成するには
前の手順で追加したコードの後に、
ThisDocument_StartupクラスのThisDocumentメソッドに次のコードを追加します。 このコードは、前に宣言した BuildingBlockGalleryContentControl オブジェクトを初期化します。 BuildingBlockGalleryContentControlには、カテゴリ従業員および顧客情報で定義され、文書パーツタイプがMicrosoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1されているすべての文書パーツが表示されます。buildingBlockControl1 = this.Controls.AddBuildingBlockGalleryContentControl( this.Paragraphs[1].Range, "buildingBlockControl1"); buildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information"; buildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1; buildingBlockControl1.PlaceholderText = "Choose your first building block"; buildingBlockControl2 = this.Controls.AddBuildingBlockGalleryContentControl( this.Paragraphs[2].Range, "buildingBlockControl2"); buildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information"; buildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1; buildingBlockControl2.PlaceholderText = "Choose your second building block";
プロジェクトをテストする
ユーザーは、ドキュメント内の文書パーツ ギャラリー コントロールをクリックして、従業員テーブルまたは顧客フィードバック テーブルを挿入できます。 ユーザーは、両方のテーブルのコンテンツ コントロールで応答を入力または選択できます。 ユーザーは顧客フィードバック テーブルの他の部分を変更できますが、従業員テーブルの他の部分を変更することはできません。
従業員テーブルをテストするには
F5 キーを押してプロジェクトを実行します。
[ 最初のビルディングブロックを選択 ] をクリックして、最初のビルディングブロック ギャラリー コンテンツ コントロールを表示します。
コントロールの カスタム ギャラリー 1 見出しの横にあるドロップダウン矢印をクリックし、[ 従業員テーブル] を選択します。
[ 従業員名 ] セルの右側にあるセルをクリックし、名前を入力します。
このセルにテキストのみを追加できることを確認します。 PlainTextContentControlを使用すると、ユーザーはテキストのみを追加でき、アートやテーブルなどの他の種類のコンテンツは追加できません。
採用日セルの右側のセルをクリックし、日付選択ツールで日付を選択します。
[ タイトル ] セルの右側にあるセルをクリックし、コンボ ボックスでいずれかの役職を選択します。
必要に応じて、一覧にない役職の名前を入力します。 これは、 ComboBoxContentControl を使用すると、ユーザーがエントリの一覧から選択したり、独自のエントリを入力したりできるためです。
[ 図 ] セルの右側にあるセルのアイコンをクリックして、画像を選択して表示します。
テーブルに行または列を追加し、テーブルから行と列を削除してみてください。 テーブルを変更できないことを確認します。 GroupContentControlを使用すると、変更を加えなくなります。
顧客フィードバック テーブルをテストするには
[ 2 番目のビルディング ブロックの選択 ] をクリックして、2 番目のビルディング ブロック ギャラリーの内容を表示します。
コントロールの [Custom Gallery 1 ] 見出しの横にあるドロップダウン矢印をクリックし、[Customer Table]\( 顧客テーブル\) を選択します。
[ 顧客名 ] セルの右側にあるセルをクリックし、名前を入力します。
[ 満足度評価 ] セルの右側にあるセルをクリックし、使用可能なオプションのいずれかを選択します。
独自のエントリを入力できないことを確認します。 DropDownListContentControlでは、ユーザーはエントリの一覧からのみ選択できます。
[ コメント ] セルの右側にあるセルをクリックし、コメントをいくつか入力します。
必要に応じて、アートや埋め込みテーブルなど、テキスト以外のコンテンツを追加します。 これは、 RichTextContentControl によってユーザーがテキスト以外のコンテンツを追加できるためです。
テーブルに行または列を追加できること、およびテーブルから行と列を削除できることを確認します。 これは、テーブルを GroupContentControlに配置して保護していないために可能です。
テンプレートを閉じます。
次のステップ
コンテンツ コントロールの使用方法の詳細については、次のトピックを参照してください。
- コンテンツ コントロールを、ドキュメントに埋め込まれた XML 部分 (カスタム XML パーツとも呼ばれます) にバインドします。 詳細については、「 チュートリアル: コンテンツ コントロールをカスタム XML パーツにバインドする」を参照してください。