Word で入力可能なフォームを作成すると、他のユーザーが簡単に入力・カスタマイズできる文書を設計できます。情報収集、フィードバックの取得、インタラクティブな文書の作成など、入力可能なフォームを使用することで、データを電子的に効率よく取得できます。テキスト フィールド、チェック ボックス、ドロップダウン リストなどの要素を追加することで、目的に応じたフォームを作成できます。 Word で入力可能なフォームを作成するには、次のツールを使用します。 コンテンツ コントロール:フォーム内でユーザーが情報を入力する領域。 表(テーブル):テキストやフォーム フィールドを揃え、枠線やボックスを作成するために使用。 保護:フォーム フィールドの入力は許可しつつ、それ以外の文書の編集を制限。 Word のコンテンツ コントロールは、文書内の内容を整理するためのコンテナーとして機能し、構造化された文書を作成できます。Word 2013 では 10 種類のコンテンツ コントロールが提供されています。本記事では、Spire.Doc for Python を使用して、一般的に利用される 7 種類のコンテンツ コントロールを含む入力可能なフォームの作成方法を紹介します。 コンテンツ コントロール 説明 テキスト(プレーン テキスト) 書式設定が適用できないプレーン テキスト フィールド。 リッチ テキスト 書式付きテキストや表、画像、他のコンテンツ コントロールを含められるテキスト フィールド。 画像 1 つの画像を挿入可能。 ドロップダウン リスト 事前に定義されたリストから選択できるドロップダウン リスト。 コンボ ボックス 事前に定義されたリストから選択するか、ユーザーが独自の値を入力できるテキスト ボックス付きのコントロール。 チェック ボックス ユーザーが「はい(チェックあり)」または「いいえ(チェックなし)」を選択できるチェック ボックス。 日付選択 ユーザーがカレンダー コントロールから日付を選択できるコントロール。 Spire.Doc for Python のインストール この操作には、Spire.Doc for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.Doc for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。 pip install Spire.Doc Python で Word 文書に入力可能なフォームを作成する Spire.Doc for Python では、StructureDocumentTagInline クラスを使用して、段落内に構造化ドキュメント タグを作成できます。このクラスの SDTProperties プロパティと SDTContent プロパティを利用することで、構造化ドキュメント タグのプロパティや内容を定義できます。以下に、Python を使用して Word 文書に入力可能なフォームを作成する手順を示します。 Document オブジェクトを作成します。 Document.AddSection() メソッドを使用してセクションを追加します。 Section.AddTable() メソッドを使用して表を追加します。 TableCell.AddParagraph() メソッドを使用して、特定のセルに段落を追加します。 StructureDocumentTagInline クラスのインスタンスを作成し、Paragraph.ChildObjects.Add() メソッドを使用して段落の子オブジェクトとして追加します。 SDTProperties プロパティと SDTContent プロパティを使用して、構造化ドキュメント タグの種類や内容、その他の属性を指定します。 Document.Protect() メソッドを使用して、フォーム フィールド以外の内容の編集を制限します。 Document.SaveToFile() メソッドを使用して文書を保存します。 Python from spire.doc import * # Document オブジェクトを作成 doc = Document() # セクションを追加 section = doc.AddSection() section.PageSetup.Margins.Top = 60 # テーブルを追加 table = section.AddTable(True) table.ResetCells(7, 2) table.SetColumnWidth(0, 120, CellWidthType.Point) table.SetColumnWidth(1, 350, CellWidthType.Point) # 1列目のセルにテキストを追加 paragraph = table.Rows[0].Cells[0].AddParagraph() 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() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.Text sdt.SDTProperties.Alias = "プレーンテキスト" sdt.SDTProperties.Tag = "プレーンテキスト" sdt.SDTProperties.IsShowingPlaceHolder = True text = SdtText(True) text.IsMultiline = False sdt.SDTProperties.ControlProperties = text textRange = TextRange(doc) textRange.Text = "ここに氏名を入力" sdt.SDTContent.ChildObjects.Add(textRange) # (1,1) のセルにリッチテキストのコンテンツコントロールを追加 paragraph = table.Rows[1].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.RichText sdt.SDTProperties.Alias = "リッチテキスト" sdt.SDTProperties.Tag = "リッチテキスト" sdt.SDTProperties.IsShowingPlaceHolder = True text = SdtText(True) text.IsMultiline = False sdt.SDTProperties.ControlProperties = text textRange = TextRange(doc) textRange.Text = "自己紹介を簡単に入力" sdt.SDTContent.ChildObjects.Add(textRange) # (2,1) のセルに画像コンテンツコントロールを追加 paragraph = table.Rows[2].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.Picture sdt.SDTProperties.Alias = "画像" sdt.SDTProperties.Tag = "画像" sdtPicture = SdtPicture(True) sdt.SDTProperties.ControlProperties = sdtPicture pic = DocPicture(doc) pic.LoadImage("G:/Documents/Holder.png") sdt.SDTContent.ChildObjects.Add(pic) # (3,1) のセルにドロップダウンリストのコンテンツコントロールを追加 paragraph = table.Rows[3].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) sdt.SDTProperties.SDTType = SdtType.DropDownList sdt.SDTProperties.Alias = "ドロップダウンリスト" sdt.SDTProperties.Tag = "ドロップダウンリスト" paragraph.ChildObjects.Add(sdt) stdList = SdtDropDownList() stdList.ListItems.Add(SdtListItem("アメリカ", "1")) stdList.ListItems.Add(SdtListItem("日本", "2")) stdList.ListItems.Add(SdtListItem("ブラジル", "3")) stdList.ListItems.Add(SdtListItem("オーストラリア", "4")) sdt.SDTProperties.ControlProperties = stdList textRange = TextRange(doc) textRange.Text = stdList.ListItems[0].DisplayText sdt.SDTContent.ChildObjects.Add(textRange) # (4,1) のセルにチェックボックスのコンテンツコントロールを2つ追加 paragraph = table.Rows[4].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.CheckBox sdtCheckBox = SdtCheckBox() sdt.SDTProperties.ControlProperties = sdtCheckBox textRange = TextRange(doc) sdt.ChildObjects.Add(textRange) sdtCheckBox.Checked = False paragraph.AppendText(" 映画") paragraph = table.Rows[4].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.CheckBox sdtCheckBox = SdtCheckBox() sdt.SDTProperties.ControlProperties = sdtCheckBox textRange = TextRange(doc) sdt.ChildObjects.Add(textRange) sdtCheckBox.Checked = False paragraph.AppendText(" ゲーム") # (5,1) のセルに日付ピッカーのコンテンツコントロールを追加 paragraph = table.Rows[5].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.DatePicker sdt.SDTProperties.Alias = "日付選択" sdt.SDTProperties.Tag = "日付選択" stdDate = SdtDate() stdDate.CalendarType = CalendarType.Default stdDate.DateFormat = "yyyy.MM.dd" stdDate.FullDate = DateTime.get_Now() sdt.SDTProperties.ControlProperties = stdDate textRange = TextRange(doc) textRange.Text = "生年月日を入力" sdt.SDTContent.ChildObjects.Add(textRange) # (6,1) のセルにコンボボックスのコンテンツコントロールを追加 paragraph = table.Rows[6].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.ComboBox sdt.SDTProperties.Alias = "コンボボックス" sdt.SDTProperties.Tag = "コンボボックス" stdComboBox = SdtComboBox() stdComboBox.ListItems.Add(SdtListItem("男性")) stdComboBox.ListItems.Add(SdtListItem("女性")) sdt.SDTProperties.ControlProperties = stdComboBox textRange = TextRange(doc) textRange.Text = stdComboBox.ListItems[0].DisplayText sdt.SDTContent.ChildObjects.Add(textRange) # 段落スタイルを作成して適用する style = ParagraphStyle(doc) style.Name = "本文" style.CharacterFormat.FontName = "Yu Gothic UI" style.CharacterFormat.FontSize = 12 doc.Styles.Add(style) for i in range(7): for j in range(2): table.Rows[i].Cells[j].Paragraphs[0].ApplyStyle(style.Name) # フォームフィールドのみ編集を許可 doc.Protect(ProtectionType.AllowOnlyFormFields, "permission-psd") # ファイルに保存 doc.SaveToFile("output/記入可能フォーム.docx", FileFormat.Docx2019) doc.Close() 一時ライセンスを申請する 結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。