Top > OOobbs2 > 66
** [[OOobbs2/66]] [#bab27ae9]
-''サマリ'': Concordance ファイル作成補助用拡張機能
-''環境'': Writer
-''状態'': 投稿
-''投稿者'': [[はにゃ?]]
-''投稿日'': 2007-09-12 (水) 12:24:06

*** 質問 [#c733195b]
Writer ドキュメントで索引を作成するときに利用できるコンコーダンスファイルを Writer ドキュメント上で作成する補助をする拡張機能。

//-この OpenOffice.org 拡張機能を利用してこうむる被害は誰にも責任はありません。
//-十分にテストされておらず致命的なバグが残っている可能性があります。
//-試してみる場合はコピーしたドキュメントおよびコピーのコンコーダンスファイルを使用してください。

&ref(ccindex-0.0.1.zip);
*** 回答 [#y68ae66e]
使い方
-動作にはPy-UNO が必要です。windows 環境ではインストール時に完全を選択しておれば使用できます。
-ツールメニュー - 拡張機能マネージャからインストール
-一度 OOo を再起動させる。クイックスタートを利用しているときは一度終了させてください。
-Writer を起動して、ツール - アドオン - ccindex を選択するとダイアログが表示されます。

- 追記。 -- [[はにゃ?]] &new{2007-09-13 (木) 00:29:06};

選択範囲のインデックスマークを削除するマクロ。インデックスは最初に見つかったものを取得。

 Sub RemoveIndexMarksFromSelection()
   Dim oDoc As Object
   oDoc = ThisComponent
   If NOT oDoc.supportsService("com.sun.star.text.TextDocument") Then Exit Sub
   
   oSelection = oDoc.getCurrentSelection()
   'sIndexName = "Alphabetical Index1"
   
   If oSelection.supportsService("com.sun.star.text.TextRanges") Then
     oIndexes = oDoc.DocumentIndexes
     If oIndexes.getCount() = 0 Then Exit Sub
     
     oIndex = GetDocumentIndex(oIndexes)
     'oIndex = oIndexes.getByName(sIndexName)
     If IsNull(oIndex) Then Exit Sub
     
     oSelected = oSelection.getByIndex(0)
     oText = oDoc.getText()
     
     oMarks = oIndex.DocumentIndexMarks
     For i = 0 To UBound(oMarks)
       On Error Goto Handler
       oRange = oMarks(i).Anchor
       nRS = oText.compareRegionStarts(oRange,oSelected)
       nRE = oText.compareRegionEnds(oRange,oSelected)
       If (nRS = -1 AND nRE = 1) Then
       	oText.removeTextContent(oMarks(i))
       Else
         If (nRS = 0 AND nRE = 1) OR (nRS = -1 AND nRE = 0) Then
           oText.removeTextContent(oMarks(i))
         End If
       End If
       Handler:
         Resume Next
     Next i
   End If
 End Sub
 
 
 Function GetDocumentIndex(oIndexes) As Object
   Dim oIndex As Object
   For i = 0 To oIndexes.getCount() -1
     oIdx = oIndexes.getByIndex(i)
     If oIdx.supportsService("com.sun.star.text.DocumentIndex") Then
       oIndex = oIdx
       Exit For
     End If
   Next i
   GetDocumentIndex = oIndex
 End Function


ccindex と上記マクロを利用すれば、
+ドキュメントを用意
+ccindex でコンコーダンスファイルを作成
+インデックスを挿入
+コンコーダンスファイルの利用のチェックを外す
+インデックスのエントリーは残る
+追加を手動で、削除は上記マクロ

残ったインデックスエントリーを編集するマクロが必要か・・・

日本語を利用するときのコンコーダンスファイルのエンコード
-OOo 2.3rc2 + win vista: Shift_JIS
-OOo 2.2.4 + Momonga linux 4: ファイルをマルチバイトとして読み込んでいない様子

#comment
*** 感想,コメント,メモ [#qd4d2a48]

#comment

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