チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.Doc for .NET»フォームフィールド»C#/VB.NET:Word ドキュメントに記入可能なフォームを作成する方法
2023-05-06

C#/VB.NET:Word ドキュメントに記入可能なフォームを作成する方法

フォームでは、テキスト、日付、画像、はい/いいえ形式の質問など、さまざまなタイプの情報のプレースホルダーを作成できます。これにより、読み手はどのような種類の情報を記載すればよいかがわかりやすくなり、また、すべての情報が同じように書式設定されるようにすることができます。Word ドキュメントで記入可能なフォームを作成するためには、以下のツールを使用する必要があります。

  • コンテンツコントロール:フォームでユーザーが情報を入力する部分です。
  • :表は、テキストやフォームフィールドを揃えるため、また、枠線とボックスを作成するためにフォームで使用します。
  • 保護:ユーザーがフィールドに入力することはできますが、文書の残りの部分には変更を加えることができません。

Word ドキュメントのコンテンツ コントロールは、ユーザーが構造化されたドキュメントを作成できるようにするためのコンテンツのコンテナです。構造化されたドキュメントでは、ドキュメント内でコンテンツが表示される場所を制御します。Word 2013 では、基本的に10種類のコンテンツ コントロールが利用可能です。この記事では、Spire.Doc for .NET を使用して、以下の7つの一般的なコンテンツ コントロールで構成される Word ドキュメントに記入可能なフォームを作成する方法を説明します。

コンテンツ コントロール 説明
テキスト テキストフィールドはプレーンテキストに限定されるため、書式を含めることはできません。
リッチ テキスト テキストフィールドで、フォーマットされたテキストや、テーブル、画像、その他のコンテンツコントロールなどのアイテムを含むことができます。
画像 1枚の画像を含むことができます。
ドロップダウン リスト ドロップダウンリストは、ユーザーが選択できるように、あらかじめ定義されたアイテムのリストを表示します。
コンボ ボックス コンボボックスは、ユーザーがリストの中からあらかじめ定義された値を選択したり、コントロールのテキストボックスに独自の値を入力したりすることができるものです。
チェック ボックス チェックボックスは、ユーザーが「はい(チェック済み)」か「いいえ(チェックなし)」かの二者択一を行うことができるグラフィカルなウィジェットです。
日付選択 ユーザーが日付を選択できるカレンダーコントロールが含まれる。

Spire.Doc for .NET をインストールします

まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.Doc

Word ドキュメントに記入可能なフォームを作成する

Spire.Doc for .NET が提供する StructureDocumentTagInline クラスは、段落内の インライン構造(DrawingML のオブジェクトやフィールドなど)に対する構造化ドキュメントタグを作成するために使用されます。このクラスの下にある SDTProperties プロパティと SDTContent プロパティは、現在の構造化ドキュメントタグのプロパティとコンテンツを指定するために使用します。以下は、Word ドキュメントにコンテンツコントロールを持つ記入可能なフォームを作成するための詳細な手順です。

  • Document のオブジェクトを作成します。
  • Document.AddSection() メソッドを使用してセクションを追加します。
  • Section.AddTable() メソッドを使用して、表を追加します。
  • TableCell.AddParagraph() メソッドを使用して、特定の表セルに段落を追加します。
  • StructureDocumentTagInline のインスタンスを作成し、Paragraph.ChildObjects.Add() メソッドを使用して子オブジェクトとして段落に追加します。
  • StructureDocumentTagInline オブジェクトの SDTProperties プロパティと SDTContent プロパティで、構造化ドキュメントタグのプロパティとコンテンツを指定します。構造化ドキュメントタグのタイプは、SDTProperties.SDTType プロパティで設定します。
  • Document.Protect() メソッドを使用して、ユーザーがフォームフィールドの外のコンテンツを編集できないようにします。
  • Document.SaveToFile() メソッドを使用して、ドキュメントを保存します。
  • C#
  • VB.NET
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System;
using System.Drawing;

namespace CreateFormInWord
{
    class Program
    {
        static void Main(string[] args)
        {
            //Documentのオブジェクトを作成する
            Document doc = new Document();

            //セクションを追加する
            Section section = doc.AddSection();

            //表を追加する
            Table table = section.AddTable(true);
            table.ResetCells(7, 2);

            //1列目のセルにテキストを追加する
            Paragraph paragraph = table.Rows[0].Cells[0].AddParagraph();
            paragraph.GetStyle().CharacterFormat.FontName = "BIZ UDGothic";
            paragraph.AppendText("テキスト");
            paragraph = table.Rows[1].Cells[0].AddParagraph();
            paragraph.AppendText("リッチ テキスト");
            paragraph = table.Rows[2].Cells[0].AddParagraph();
            paragraph.AppendText("画像");
            paragraph = table.Rows[3].Cells[0].AddParagraph();
            paragraph.AppendText("ドロップダウン リスト");
            paragraph = table.Rows[4].Cells[0].AddParagraph();
            paragraph.AppendText("チェック ボックス");
            paragraph = table.Rows[5].Cells[0].AddParagraph();
            paragraph.AppendText("コンボ ボックス");
            paragraph = table.Rows[6].Cells[0].AddParagraph();
            paragraph.AppendText("日付選択");

            //セル(0,1)にプレーンテキストコンテンツコントロールを追加する
            paragraph = table.Rows[0].Cells[1].AddParagraph();
            StructureDocumentTagInline sdt = new StructureDocumentTagInline(doc);
            paragraph.ChildObjects.Add(sdt);
            sdt.SDTProperties.SDTType = SdtType.Text;
            sdt.SDTProperties.Alias = "テキスト";
            sdt.SDTProperties.Tag = "テキスト";
            sdt.SDTProperties.IsShowingPlaceHolder = true;
            SdtText text = new SdtText(true);
            text.IsMultiline = false;
            sdt.SDTProperties.ControlProperties = text;
            TextRange tr = new TextRange(doc);
            tr.Text = "ここをクリックまたはタップしてテキストを入力してください。";
            sdt.SDTContent.ChildObjects.Add(tr);

            //セル(1,1)にリッチテキストコンテンツコントロールを追加する
            paragraph = table.Rows[1].Cells[1].AddParagraph();
            sdt = new StructureDocumentTagInline(doc);
            paragraph.ChildObjects.Add(sdt);
            sdt.SDTProperties.SDTType = SdtType.RichText;
            sdt.SDTProperties.Alias = "リッチ テキスト";
            sdt.SDTProperties.Tag = "リッチ テキスト";
            sdt.SDTProperties.IsShowingPlaceHolder = true;
            text = new SdtText(true);
            text.IsMultiline = false;
            sdt.SDTProperties.ControlProperties = text;
            tr = new TextRange(doc);
            tr.Text = "ここをクリックまたはタップしてテキストを入力してください。";
            sdt.SDTContent.ChildObjects.Add(tr);

            //セル(2,1)に画像コンテンツコントロールを追加する
            paragraph = table.Rows[2].Cells[1].AddParagraph();
            sdt = new StructureDocumentTagInline(doc);
            paragraph.ChildObjects.Add(sdt);
            sdt.SDTProperties.SDTType = SdtType.Picture;
            sdt.SDTProperties.Alias = "画像";
            sdt.SDTProperties.Tag = "画像";
            SdtPicture sdtPicture = new SdtPicture();
            sdt.SDTProperties.ControlProperties = sdtPicture;
            DocPicture pic = new DocPicture(doc);
            pic.LoadImage(Image.FromFile("C:\\Users\\Sirion\\Desktop\\画像を選択.png"));
            sdt.SDTContent.ChildObjects.Add(pic);

            //セル(3,1)にドロップダウンリストコンテンツコントロールを追加する
            paragraph = table.Rows[3].Cells[1].AddParagraph();
            sdt = new StructureDocumentTagInline(doc);
            sdt.SDTProperties.SDTType = SdtType.DropDownList;
            sdt.SDTProperties.Alias = "ドロップダウン リスト";
            sdt.SDTProperties.Tag = "ドロップダウン リスト";
            paragraph.ChildObjects.Add(sdt);
            SdtDropDownList sddl = new SdtDropDownList();
            sddl.ListItems.Add(new SdtListItem("アイテムを選択してください。", "1"));
            sddl.ListItems.Add(new SdtListItem("アイテム 2", "2"));
            sddl.ListItems.Add(new SdtListItem("アイテム 3", "3"));
            sddl.ListItems.Add(new SdtListItem("アイテム 4", "4"));
            sdt.SDTProperties.ControlProperties = sddl;
            tr = new TextRange(doc);
            tr.Text = sddl.ListItems[0].DisplayText;
            sdt.SDTContent.ChildObjects.Add(tr);

            //セル(4,1)にチェックボックスコンテンツコントロールを2つ追加する
            paragraph = table.Rows[4].Cells[1].AddParagraph();
            sdt = new StructureDocumentTagInline(doc);
            paragraph.ChildObjects.Add(sdt);
            sdt.SDTProperties.SDTType = SdtType.CheckBox;
            SdtCheckBox scb = new SdtCheckBox();
            sdt.SDTProperties.ControlProperties = scb;
            tr = new TextRange(doc);
            sdt.ChildObjects.Add(tr);
            scb.Checked = false;
            paragraph.AppendText(" オプション 1");

            paragraph = table.Rows[4].Cells[1].AddParagraph();
            sdt = new StructureDocumentTagInline(doc);
            paragraph.ChildObjects.Add(sdt);
            sdt.SDTProperties.SDTType = SdtType.CheckBox;
            scb = new SdtCheckBox();
            sdt.SDTProperties.ControlProperties = scb;
            tr = new TextRange(doc);
            sdt.ChildObjects.Add(tr);
            scb.Checked = false;
            paragraph.AppendText(" オプション 2");

            //セル(5,1)にコンボボックスコンテンツコントロールを追加する
            paragraph = table.Rows[5].Cells[1].AddParagraph();
            sdt = new StructureDocumentTagInline(doc);
            paragraph.ChildObjects.Add(sdt);
            sdt.SDTProperties.SDTType = SdtType.ComboBox;
            sdt.SDTProperties.Alias = "コンボ ボックス";
            sdt.SDTProperties.Tag = "コンボ ボックス";
            SdtComboBox cb = new SdtComboBox();
            cb.ListItems.Add(new SdtListItem("アイテムを選択してください。"));
            cb.ListItems.Add(new SdtListItem("アイテム 2"));
            cb.ListItems.Add(new SdtListItem("アイテム 3"));
            sdt.SDTProperties.ControlProperties = cb;
            tr = new TextRange(doc);
            tr.Text = cb.ListItems[0].DisplayText;
            sdt.SDTContent.ChildObjects.Add(tr);

            //セル(6,1)に日付選択コンテンツコントロールを追加する
            paragraph = table.Rows[6].Cells[1].AddParagraph();
            sdt = new StructureDocumentTagInline(doc);
            paragraph.ChildObjects.Add(sdt);
            sdt.SDTProperties.SDTType = SdtType.DatePicker;
            sdt.SDTProperties.Alias = "日付選択";
            sdt.SDTProperties.Tag = "日付選択";
            SdtDate date = new SdtDate();
            date.CalendarType = CalendarType.Default;
            date.DateFormat = "yyyy.MM.dd";
            date.FullDate = DateTime.Now;
            sdt.SDTProperties.ControlProperties = date;
            tr = new TextRange(doc);
            tr.Text = "クリックまたはタップして日付を入力してください。";
            sdt.SDTContent.ChildObjects.Add(tr);

            //ユーザーがフォームフィールドを編集することのみを許可する
            doc.Protect(ProtectionType.AllowOnlyFormFields, "permission-psd");

            //ドキュメントを保存する
            doc.SaveToFile("記入可能なフォーム.docx", FileFormat.Docx2013);
        }
    }
}
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports System
Imports System.Drawing

Namespace CreateFormInWord
    Class Program
        Shared Sub Main(ByVal args() As String)
            'Documentのオブジェクトを作成する
            Dim doc As Document = New Document()

            'セクションを追加する
            Dim section As Section = doc.AddSection()

            '表を追加する
            Dim table As Table = section.AddTable(True)
            table.ResetCells(7, 2)

            '1列目のセルにテキストを追加する
            Dim paragraph As Paragraph = table.Rows(0).Cells(0).AddParagraph()
            paragraph.GetStyle().CharacterFormat.FontName = "BIZ UDGothic"
            paragraph.AppendText("テキスト")
            paragraph = table.Rows(1).Cells(0).AddParagraph()
            paragraph.AppendText("リッチ テキスト")
            paragraph = table.Rows(2).Cells(0).AddParagraph()
            paragraph.AppendText("画像")
            paragraph = table.Rows(3).Cells(0).AddParagraph()
            paragraph.AppendText("ドロップダウン リスト")
            paragraph = table.Rows(4).Cells(0).AddParagraph()
            paragraph.AppendText("チェック ボックス")
            paragraph = table.Rows(5).Cells(0).AddParagraph()
            paragraph.AppendText("コンボ ボックス")
            paragraph = table.Rows(6).Cells(0).AddParagraph()
            paragraph.AppendText("日付選択")

            'セル(0,1)にプレーンテキストコンテンツコントロールを追加する
            paragraph = table.Rows(0).Cells(1).AddParagraph()
            Dim sdt As StructureDocumentTagInline = New StructureDocumentTagInline(doc)
            paragraph.ChildObjects.Add(sdt)
            sdt.SDTProperties.SDTType = SdtType.Text
            sdt.SDTProperties.Alias = "テキスト"
            sdt.SDTProperties.Tag = "テキスト"
            sdt.SDTProperties.IsShowingPlaceHolder = True
            Dim text As SdtText = New SdtText(True)
            text.IsMultiline = False
            sdt.SDTProperties.ControlProperties = text
            Dim tr As TextRange = New TextRange(doc)
            tr.Text = "ここをクリックまたはタップしてテキストを入力してください。"
            sdt.SDTContent.ChildObjects.Add(tr)

            'セル(1,1)にリッチテキストコンテンツコントロールを追加する
            paragraph = table.Rows(1).Cells(1).AddParagraph()
            sdt = New StructureDocumentTagInline(doc)
            paragraph.ChildObjects.Add(sdt)
            sdt.SDTProperties.SDTType = SdtType.RichText
            sdt.SDTProperties.Alias = "リッチ テキスト"
            sdt.SDTProperties.Tag = "リッチ テキスト"
            sdt.SDTProperties.IsShowingPlaceHolder = True
            text = New SdtText(True)
            text.IsMultiline = False
            sdt.SDTProperties.ControlProperties = text
            tr = New TextRange(doc)
            tr.Text = "ここをクリックまたはタップしてテキストを入力してください。"
            sdt.SDTContent.ChildObjects.Add(tr)

            'セル(2,1)に画像コンテンツコントロールを追加する
            paragraph = table.Rows(2).Cells(1).AddParagraph()
            sdt = New StructureDocumentTagInline(doc)
            paragraph.ChildObjects.Add(sdt)
            sdt.SDTProperties.SDTType = SdtType.Picture
            sdt.SDTProperties.Alias = "画像"
            sdt.SDTProperties.Tag = "画像"
            Dim sdtPicture As SdtPicture = New SdtPicture()
            sdt.SDTProperties.ControlProperties = sdtPicture
            Dim pic As DocPicture = New DocPicture(doc)
            pic.LoadImage(Image.FromFile("C:\\Users\\Sirion\\Desktop\\画像を選択.png"))
            sdt.SDTContent.ChildObjects.Add(pic)

            'セル(3,1)にドロップダウンリストコンテンツコントロールを追加する
            paragraph = table.Rows(3).Cells(1).AddParagraph()
            sdt = New StructureDocumentTagInline(doc)
            sdt.SDTProperties.SDTType = SdtType.DropDownList
            sdt.SDTProperties.Alias = "ドロップダウン リスト"
            sdt.SDTProperties.Tag = "ドロップダウン リスト"
            paragraph.ChildObjects.Add(sdt)
            Dim sddl As SdtDropDownList = New SdtDropDownList()
            sddl.ListItems.Add(New SdtListItem("アイテムを選択してください。", "1"))
            sddl.ListItems.Add(New SdtListItem("アイテム 2", "2"))
            sddl.ListItems.Add(New SdtListItem("アイテム 3", "3"))
            sddl.ListItems.Add(New SdtListItem("アイテム 4", "4"))
            sdt.SDTProperties.ControlProperties = sddl
            tr = New TextRange(doc)
            tr.Text = sddl.ListItems(0).DisplayText
            sdt.SDTContent.ChildObjects.Add(tr)

            'セル(4,1)にチェックボックスコンテンツコントロールを2つ追加する
            paragraph = table.Rows(4).Cells(1).AddParagraph()
            sdt = New StructureDocumentTagInline(doc)
            paragraph.ChildObjects.Add(sdt)
            sdt.SDTProperties.SDTType = SdtType.CheckBox
            Dim scb As SdtCheckBox = New SdtCheckBox()
            sdt.SDTProperties.ControlProperties = scb
            tr = New TextRange(doc)
            sdt.ChildObjects.Add(tr)
            scb.Checked = False
            paragraph.AppendText(" オプション 1")

            paragraph = table.Rows(4).Cells(1).AddParagraph()
            sdt = New StructureDocumentTagInline(doc)
            paragraph.ChildObjects.Add(sdt)
            sdt.SDTProperties.SDTType = SdtType.CheckBox
            scb = New SdtCheckBox()
            sdt.SDTProperties.ControlProperties = scb
            tr = New TextRange(doc)
            sdt.ChildObjects.Add(tr)
            scb.Checked = False
            paragraph.AppendText(" オプション 2")

            'セル(5,1)にコンボボックスコンテンツコントロールを追加する
            paragraph = table.Rows(5).Cells(1).AddParagraph()
            sdt = New StructureDocumentTagInline(doc)
            paragraph.ChildObjects.Add(sdt)
            sdt.SDTProperties.SDTType = SdtType.ComboBox
            sdt.SDTProperties.Alias = "コンボ ボックス"
            sdt.SDTProperties.Tag = "コンボ ボックス"
            Dim cb As SdtComboBox = New SdtComboBox()
            cb.ListItems.Add(New SdtListItem("アイテムを選択してください。"))
            cb.ListItems.Add(New SdtListItem("アイテム 2"))
            cb.ListItems.Add(New SdtListItem("アイテム 3"))
            sdt.SDTProperties.ControlProperties = cb
            tr = New TextRange(doc)
            tr.Text = cb.ListItems(0).DisplayText
            sdt.SDTContent.ChildObjects.Add(tr)

            'セル(6,1)に日付選択コンテンツコントロールを追加する
            paragraph = table.Rows(6).Cells(1).AddParagraph()
            sdt = New StructureDocumentTagInline(doc)
            paragraph.ChildObjects.Add(sdt)
            sdt.SDTProperties.SDTType = SdtType.DatePicker
            sdt.SDTProperties.Alias = "日付選択"
            sdt.SDTProperties.Tag = "日付選択"
            Dim date As SdtDate = New SdtDate()
            Date.CalendarType = CalendarType.Default
            Date.DateFormat = "yyyy.MM.dd"
            Date.FullDate = DateTime.Now
            sdt.SDTProperties.ControlProperties = Date
            tr = New TextRange(doc)
            tr.Text = "クリックまたはタップして日付を入力してください。"
            sdt.SDTContent.ChildObjects.Add(tr)

            'ユーザーがフォームフィールドを編集することのみを許可する
            doc.Protect(ProtectionType.AllowOnlyFormFields, "permission-psd")

            'ドキュメントを保存する
            doc.SaveToFile("記入可能なフォーム.docx", FileFormat.Docx2013)
        End Sub
    End Class
End Namespace

C#/VB.NET:Word ドキュメントに記入可能なフォームを作成する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Read 688 times