チュートリアル

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

チュートリアル»Python»Spire.Doc for Python»フォームフィールド»Python:Word 文書で入力可能なフォームを作成する方法
2025-02-26

Python:Word 文書で入力可能なフォームを作成する方法

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()

Spire.Doc for Pythonで作成したWord文書に記入可能なフォーム

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

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

Read 44 times