構造化ドキュメントタグ(コンテンツコントロール)の操作
構造化ドキュメントタグ(コンテンツ コントロール)の操作
構造化文書タグ (SDT) は、Word UI ではコンテンツコントロールとして知られ、型付けされた制約付き編集動作――チェックボックス、日付ピッカー、ドロップダウンリスト、またはプレーンテキストまたはリッチテキストのプレースホルダー――で文書の一部をラップします。 Aspose.Words の .NET 用 FOSS これらを通じてモデル化します Aspose.Words.Markup 名前空間で、先頭にあるのは StructuredDocumentTag クラス。このページでは、コンテンツコントロールの挿入、各タイプの設定、検索と削除、そしてカスタム XML データへのバインディングについて説明します。
構造化ドキュメントタグオブジェクトモデル
StructuredDocumentTag は CompositeNode であり、IMarkupNode、ITrackableNode、IStructuredDocumentTag も実装しています。SdtType はコントロールの種類を識別します。Tag と Title は、作者が Word で設定した識別文字列を保持します;Placeholder(BuildingBlock)と PlaceholderName は、コントロールが空の場合に表示されるプロンプトテキストを提供し、IsShowingPlaceholderText を通じて報告されます。LockContentControl はコントロールの削除を防止し、LockContents はその内容の編集を防止します。これらは互いに独立しています。
コンテンツ コントロールの挿入
DocumentBuilder.InsertStructuredDocumentTag(SdtType) はカーソル位置に新しいコントロールを挿入しますが、SdtType のうち 7 つの値に限られます:PlainText、RichText、Checkbox、DropDownList、ComboBox、Picture、および Date。RepeatingSection と RepeatingSectionItem はこの方法でテキストカーソルに挿入できません——代わりに段落全体やテーブル行全体をラップします。Word ファイルに存在するが Word UI では挿入可能なタイプとして表示されない残りの SdtType 値、すなわち None、Bibliography、Citation、Equation、BuildingBlockGallery、DocPartObj、Group、および EntityPicker は、この挿入方法ではサポートされていません。
タイプ固有のコンテンツ
チェックボックスコントロールの状態は StructuredDocumentTag.Checked です;SetCheckedSymbol() と SetUncheckedSymbol() は各状態で表示されるグリフを設定します。日付コントロールはその値を FullDate に保存し、DateDisplayFormat と DateDisplayLocale がレンダリング方法を制御し、DateStorageFormat(SdtDateStorageFormat)が XML データにバインドされたときの保存方法を制御し、CalendarType(SdtCalendarType)がカレンダーシステムを選択します。ドロップダウンリストまたはコンボボックスは ListItems を介して選択肢を公開し、SdtListItemCollection は SdtListItem(DisplayText、Value)の SelectedValue です。プレーンテキストコントロールの Multiline プロパティは、内部で改行を許可または禁止します。
外観とロック
Appearance(SdtAppearance)は、Word でコントロールが視覚的に区切られる方法を制御します。Color はハイライト色を設定し、ContentsFont / EndCharacterFont は内容に適用されるフォントと末尾文字を制御します。LockContentControl と LockContents は独立したスイッチで、前者はコントロール自体の削除をブロックし、後者は内部の編集をブロックします。
コンテンツコントロールの検索と削除
Range.StructuredDocumentTags は、その範囲にスコープされた StructuredDocumentTagCollection を返し、GetById()、GetByTag()、GetByTitle() をターゲット検索に使用し、Remove() と RemoveAt() と併せて利用できます。個々の StructuredDocumentTag に対しては、Remove() がコントロールとその内容を一緒に削除し、RemoveSelfOnly() がラッパーだけを削除して内容は文書に残し、Clear() がコントロール自体は残したまま内容を空にします。
XML データバインディング
StructuredDocumentTag.XmlMapping は、ドキュメント内のカスタム XML パートへのバインディングを記述する XmlMapping インスタンスです:CustomXmlPart、XPath、PrefixMappings、StoreItemId、および IsMapped。SetMapping() は既存のカスタム XML パートへのバインディングを確立し、Delete() はそれを削除します。
マルチセクション(範囲)コンテンツコントロール
1つ以上のセクションにまたがるコンテンツ コントロール – IsMultiSection によって報告される – は、単一の StructuredDocumentTag ノードではなく、StructuredDocumentTagRangeStart と StructuredDocumentTagRangeEnd のペアで表され、StructuredDocumentTagRangeStart.RangeEnd を介して接続されます。単一ノード形式と範囲形式はどちらも共通の IStructuredDocumentTag インターフェイスを実装しているため、Tag、Title、SdtType、Placeholder などの識別プロパティだけが必要なコードは、どちらの形式でも同様に動作できます。
ヒントとベストプラクティス
- 使用する前に
DocumentBuilder.InsertStructuredDocumentTag()のサポートされているタイプ一覧を確認してください – カーソルに挿入できるのはPlainText、RichText、Checkbox、DropDownList、ComboBox、Picture、Dateのみです。その他のタイプは例外をスローします。 - コンテンツ コントロールを “flatten” したい場合は、
Remove()の代わりにRemoveSelfOnly()を使用してください – 内容は文書に残しつつ、コントロールのラッパーは削除します。 ListItemsを、DropDownListまたはComboBoxコントロールが選択肢を表示する前に設定し、SelectedValueを使用してアクティブなものを選択してください。- コードが通常のコンテンツ コントロールとマルチセクション(範囲)コンテンツ コントロールの両方を同じ方法で処理する必要がある場合は、
StructuredDocumentTagを直接使用するのではなく、IStructuredDocumentTagに対してプログラミングしてください。 XmlMapping.SetMapping()は、文書のカスタム XML データストアに既に存在しているカスタム XML パートにバインドします – コントロールをマッピングする前に、XML データを追加またはロードしてください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
InsertStructuredDocumentTag() は NotImplementedException を投げます | 要求された SdtType(例: Citation、Equation、または BuildingBlockGallery)は、挿入可能な7つのタイプのいずれでもありません | PlainText、RichText、Checkbox、DropDownList、ComboBox、Picture、Date のいずれかを使用してください |
InsertStructuredDocumentTag() は InvalidOperationException を投げます | テキストカーソルで RepeatingSection または RepeatingSectionItem が要求されました | これらのタイプはカーソル位置ではなく、段落全体またはテーブル行全体を囲みます |
| コンテンツ コントロールを削除すると、その内部のテキストも削除されます | Remove() はコントロールとその内容を一緒に削除します | 代わりにRemoveSelfOnly()を呼び出して、内容を保持してください |
| チェックボックスが期待されるシンボルを表示しません | カスタムのチェック済み/未チェックのグリフが設定されていませんでした | SetCheckedSymbol()とSetUncheckedSymbol()を呼び出してください |
FAQ
DocumentBuilderで直接挿入できるコンテンツコントロールのタイプはどれですか?
PlainText、RichText、Checkbox、DropDownList、ComboBox、Picture、およびDateです。他のSdtTypeの値はInsertStructuredDocumentTag()ではサポートされていません。
特定のタグを持つすべてのコンテンツコントロールをどうやって検索しますか?
Range.StructuredDocumentTags.GetByTag()を使用してください。あるいは、代わりにそれらでマッチさせる場合はGetByTitle() / GetById()を使用します。
コンテンツコントロールを削除し、内容は保持するにはどうすればよいですか?
Remove()ではなくStructuredDocumentTag.RemoveSelfOnly()を呼び出してください。
コンテンツコントロールをカスタムXMLデータにバインドするにはどうすればよいですか?
コントロールで XmlMapping.SetMapping() を呼び出し、既存のカスタム XML パートとその中の XPath 式を指すようにします。
プレーンな StructuredDocumentTag とレンジ付きのものの違いは何ですか?
複数の文書セクションにまたがるコンテンツ コントロールは、単一ノードの代わりに StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd ペアとして表されます。両方の形態は IStructuredDocumentTag を実装しています。
API Reference サマリー
| クラス / インターフェース / 列挙型 | 説明 |
|---|---|
StructuredDocumentTag | コンテンツ コントロール ノード; SdtType, Tag, Title, Remove(), RemoveSelfOnly(), Clear() |
IStructuredDocumentTag | 通常コンテンツコントロールとマルチセクションコンテンツコントロールが共有する共通インターフェース |
StructuredDocumentTagCollection | 範囲内のコンテンツコントロールは、Range.StructuredDocumentTags を介して; GetById()、GetByTag()、GetByTitle() |
StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd | マルチセクションコンテンツコントロールを表す開始/終了ペア |
SdtType | コンテンツコントロールの種類を識別する Enum |
SdtAppearance | コンテンツ コントロールの視覚的区切りスタイル |
SdtCalendarType / SdtDateStorageFormat | 日付コントロールのカレンダーシステムと保存形式 |
SdtListItem / SdtListItemCollection | ドロップダウンリストまたはコンボボックス コントロールの選択肢 |
XmlMapping | コンテンツ コントロール用のカスタム XML データバインディング; SetMapping(), Delete() |
DocumentBuilder.InsertStructuredDocumentTag | カーソル位置にサポートされているコンテンツコントロールタイプを挿入します |