Top > OOoBasic > Writer > TableofContents

目次 Edit

目次はテキストコンテンツとして com.sun.star.text.ContentIndex サービスを利用します。

目次の挿入 Edit

com.sun.star.text.ContentIndex サービスをインスタンス化してコンテンツとして挿入します。挿入後に update しないと灰色のフィールドのみが表示された状態になります。

Sub toc_1
  oDoc = ThisComponent
  oText = oDoc.getText()
  oEnd = oText.getEnd()
  oIndex = oDoc.createInstance("com.sun.star.text.ContentIndex")
  oIndex.CreateFromOutline = True
  oText.insertTextContent(oEnd,oIndex,False)
  
  oIndex.update()
End Sub

目次の更新 Edit

update メソッドを呼び出します。

目次の取得 Edit

ドキュメントに既存の目次があるときには DocumentIndexes プロパティから取得します。取得したコンテナオブジェクトには目次以外にも索引なども含まれるため、個別にサービス名を調べます。目次オブジェクトのサービス名は com.sun.star.text.ContentIndex です。

Sub toc_4
  oDoc = ThisComponent
  oIndexes = oDoc.getDocumentIndexes()
  For i = 0 To oIndexes.getCount() -1
     oIndex = oIndexes.getByIndex(i)
     If oIndex.ServiceName = "com.sun.star.text.ContentIndex" Then
       '...
     End If
  Next i
End Sub

目次エントリマーク Edit

目次に項目を追加するときのエントリマークの挿入は、テキスト範囲に com.sun.star.text.ContentIndexMark サービスを挿入する形で設定します。マークのアンカーのテキスト範囲がエントリになります。以下の例では選択範囲にエントリマークを設定します。

Sub toc_5
  oDoc = ThisComponent
  oIndexes = oDoc.getDocumentIndexes()
  oIndex = oIndexes.getByName("Table of Contents1")
  oText = oDoc.getText()

  oSelection = oDoc.getCurrentSelection()
  If oSelection.Count = 1 Then
    oEntry = oDoc.createInstance("com.sun.star.text.ContentIndexMark")
    oRange = oSelection.getByIndex(0)
    oText.insertTextContent(oRange,oEntry,True)
  End If
  oIndex.update()
End Sub

エントリマークの項目を目次に表示したいときには CreateFromMarks プロパティを true に設定します。

プロパティ一覧 Edit

プロパティ
BackColorlong背景色
BackGraphicFilterstring背景画像フィルター名
BackGraphicLocation.style.GraphicLocation背景画像配置
BackGraphicURLstring背景画像 URL
BackTransparentboolean背景の透過
ContentSection.text.XTextSectionコンテンツ部分のセクションオブジェクト
CreateFromChapterbooleanチャプタをコンテンツに
CreateFromLevelParagraphStylesboolean段落スタイルからレベル作成
CreateFromMarksbooleanコンテンツマークから作成
CreateFromOutlinebooleanアウトラインから作成
DocumentIndexMarks[].text.XDocumentIndexMarkコンテンツエントリーマーク
HeaderSection.text.XTextSection目次ヘッダ部分のセクションオブジェクト
IsProtectedboolean保護する
IsRelativeTabstopsboolean相対タブストップを利用
Levelshortレベル
LevelFormat.container.XIndexReplaceレベルごとのフォーマットスタイル
LevelParagraphStyles.container.XIndexReplaceレベルごとの段落フォーマット
Namestring目次オブジェクト名
ParaStyleHeadingstring目次ヘッダスタイル名
ParaStyleLevel1string項目スタイル名
ParaStyleLevel10string
ParaStyleLevel2string
ParaStyleLevel3string
ParaStyleLevel4string
ParaStyleLevel5string
ParaStyleLevel6string
ParaStyleLevel7string
ParaStyleLevel8string
ParaStyleLevel9string
TextColumns.text.XTextColumns列区切り列
Titlestring目次タイトル

その他のスタイルから Edit

その他のスタイルが指定された段落から目次の項目を追加します。まず、CreateFromLevelParagraphStyles プロパティを True にします。その後、追加したい段落のスタイル名を次のようにして追加します。

Sub toc_5
 oDoc = ThisComponent
 oText = oDoc.getText()
 oEnd = oText.getEnd()
 oIndex = oDoc.createInstance("com.sun.star.text.ContentIndex")
 oIndex.CreateFromOutline = True
 oIndex.CreateFromLevelParagraphStyles = True
 ' Heading a スタイルを追加
 oLevelParaStyles = oIndex.LevelParagraphStyles
 oLevelParaStyles.replaceByIndex(1, Array("Heading a"))
 
 oText.insertTextContent(oEnd,oIndex,False)
 
 oIndex.update()
End Sub

項目の形式 Edit

各目次項目は LevelFormat プロパティからアクセスできるコンテナで管理されています。項目は各レベルに所属しており、このコンテナではレベルがインデックスとなっています。

ダイアログで目次の項目を編集するときと同じ順序で項目を指定していきます。各値は []com.sun.star.beans.PropertyValue です。 項目は二つの要素で構成されており、一つは TokenType でその項目の種類を表します。もうひとつの CharacterStyleName ではスタイル名を指定します。

TokenType 項目の種類は com.sun.star.text.DocumentIndexLevelFormat サービスの説明に書かれています。

名前説明
TokenEntryNumber章、セクション番号など
TokenEntryText見出しのテキスト
TokenTabStopタブ
TokenPageNumberページ番号
TokenTextテキスト
TokenHyperlinkStartハイパーリンク開始
TokenHyperlinkEndハイパーリンク終了
TokenChapterInfo章情報。表や図などの目次用。
TokenBibliographyDataField参考文献データフィールド名

TokenType が TokenTabStop のときには追加で次の項目を指定します。

名前説明
TabStopRightAlignedタブで右揃え
TabStopFillCharacterタブとして埋める文字
WithTabTrue のときタブを挿入

TokenType が TokenEntryText のときには Text 項目で挿入するテキストを指定します。

デフォルトの項目は次のような構成になっています。

'章番号 項目名 タブ(文字"."、右揃え) ページ番号

aFormat = Array( _
  Array(mkPropertyValue("TokenType", "TokenEntryNumber"), _
        mkPropertyValue("CharacterStyleName", "")), _
  Array(mkPropertyValue("TokenType", "TokenEntryText"), _
        mkPropertyValue("CharacterStyleName", "")), _
  Array(mkPropertyValue("TokenType", "TokenTabStop"), _
        mkPropertyValue("TabStopRightAligned", True), _
        mkPropertyValue("TabStopFillCharacter", "."), _
        mkPropertyValue("WithTab", True), _
        mkPropertyValue("CharacterStyleName", "")), _
  Array(mkPropertyValue("TokenType", "TokenPageNumber"), _
        mkPropertyValue("CharacterStyleName", "")) _
)

Function mkPropertyValue(sName, vValue) As com.sun.star.beans.PropertyValue
  v = CreateUnoStruct("com.sun.star.beasn.PropertyValue")
  v.Name = sName
  v.Value = vValue
  mkPropertyValue = v
End Function

例えば、ハイパーリンクをページ番号の部分に設定するなら、TokenPageNumber の項目を TokenHyperlinkStart と TokenHyperlinkEnd で囲みます。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes