Top > OOoBasic > Writer > Field
*フィールド [#c5f053d5]
挿入 - フィールド - その他... から利用できるフィールド。

フィールドのサービス名で TextField となっているものは利用しないほうがいいようです。サービス名の付け方の問題で削除されるようです。(サービスをインスタンス化するときにサービス名は文字の大小を区別されます)

#contents

**フィールドサービス名一覧 [#we723a50]
|サービス名|説明|
|com.sun.star.text.textfield.TemplateName|テンプレート|
|com.sun.star.text.textfield.FileName|ファイル名|
|com.sun.star.text.textfield.PageNumber|ページ番号|
|com.sun.star.text.textfield.Chapter|章|
|com.sun.star.text.textfield.Author|ユーザー|
|com.sun.star.text.textfield.PageCount|ページ数|
|com.sun.star.text.textfield.ParagraphCount|段落数|
|com.sun.star.text.textfield.WordCount|単語数|
|com.sun.star.text.textfield.CharacterCount|文字数|
|com.sun.star.text.textfield.TableCount|表数|
|com.sun.star.text.textfield.EmbeddedObjectCount|オブジェクト数|
|com.sun.star.text.textfield.GraphicObjectCount|画像数|
|com.sun.star.text.textfield.DateTime|日付と時間|
|--|--|
|com.sun.star.text.textfield.docinfo.KeyWords|キーワード|
|com.sun.star.text.textfield.docinfo.Description|コメント|
|com.sun.star.text.textfield.docinfo.Title|タイトル|
|com.sun.star.text.textfield.docinfo.Subject|テーマ|
|com.sun.star.text.textfield.docinfo.Revision|リビジョン番号|
|com.sun.star.text.textfield.docinfo.EditTime|合計編集時間|
|com.sun.star.text.textfield.docinfo.CreateAuthor|作成者|
|com.sun.star.text.textfield.docinfo.CreateDateTime|作成日時|
|com.sun.star.text.textfield.docinfo.Info0|情報0|
|com.sun.star.text.textfield.docinfo.Info1|情報1|
|com.sun.star.text.textfield.docinfo.Info2|情報2|
|com.sun.star.text.textfield.docinfo.Info3|情報3|
|com.sun.star.text.textfield.docinfo.ChangeAuthor|編集者|
|com.sun.star.text.textfield.docinfo.ChangeDateTime|編集日時|
|com.sun.star.text.textfield.docinfo.PrintAuthor|印刷者|
|com.sun.star.text.textfield.docinfo.PrintDateTime|印刷日時|
|--|--|
|com.sun.star.text.textfield.GetReference|参照|
|--|--|
|com.sun.star.text.textfield.ConditionalText|条件付テキスト|
|com.sun.star.text.textfield.DropDown|ドロップダウンリスト|
|com.sun.star.text.textfield.InputUser|入力フィールド|
|com.sun.star.text.textfield.Macro|マクロ実行|
|com.sun.star.text.textfield.Script|スクリプト実行|
|com.sun.star.text.textfield.JumpEdit|プレースホルダ|
|com.sun.star.text.textfield.CombinedCharacters|組み合わせ文字|
|com.sun.star.text.textfield.HiddenText|隠しテキスト|
|com.sun.star.text.textfield.HiddenParagraph|隠し段落|
|--|--|
|com.sun.star.text.textfield.SetExpression|変数の設定|
|com.sun.star.text.textfield.GetExpression|変数の表示|
|com.sun.star.text.textfield.DDE|DDE|
|com.sun.star.text.textfield.TableFormula|表式|
|com.sun.star.text.textfield.Input|インプットフィールド|
|com.sun.star.text.textfield.ReferencePageGet|ページ変数の表示|
|com.sun.star.text.textfield.ReferencePageSet|ページ変数の設定|
|com.sun.star.text.textfield.ExtendedUser|ユーザー|
|--|--|
|com.sun.star.text.textfield.Bibliography|Bibliography|
|com.sun.star.text.textfield.Database|データベース|
|com.sun.star.text.textfield.DatabaseName|データベース名|
|com.sun.star.text.textfield.DatabaseNextSet|次のレコード|
|com.sun.star.text.textfield.DatabaseNumberOfSet|レコード番号|
|com.sun.star.text.textfield.DatabaseSetNumber|任意のレコード|
|com.sun.star.text.textfield.Annotation|コメントフィールド|
**ドキュメント [#eeffe07e]
ドキュメント自体の情報などのフィールド。
*** ファイル名 [#k162c211]

#code(basic){{
Sub insert_FileName_field
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.FileName")
  With oField
    .FileFormat = com.sun.star.text.FilenameDisplayFormat.NAME ' 表示形式
    .IsFixed = False ' 内容を固定するかどうか
  End With

  oText.insertTextContent(oText.getEnd(), oField, False)
End Sub
}}
*** ページ番号 [#u8429cea]
#code(basic){{
Sub insert_pagenumber_field
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.PageNumber")
  With oField
    .NumberingType = com.sun.star.style.NumberingType.ARABIC
    .SubType = com.sun.star.text.PageNumberType.NEXT
    .Offset = 0
    .UserText = ""
  End With
  
  oText.insertTextContent(oText.getEnd(), oField, False)
End Sub
}}

*** ユーザー/著者 [#m2ba6bf1]
著者名を表示。

#code(basic){{
Sub insert_Author_field
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.Author")
  With oField
    .FullName = True ' 名前またはイニシャル
    .IsFixed = False ' 内容の固定
  End With
  
  oText.insertTextContent(oText.getEnd(), oField, False)
End Sub
}}

*** 差出人 [#f7d07ef4]
ユーザーの種々のデータを表示するフィールド。
#code(basic){{
Sub insert_ExtendedUser_field
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.ExtendedUser")
  With oField
    .Content = "000-1234" ' 内容
    .UserDataType = com.sun.star.text.UserDataPart.ZIP ' データの形式
    .IsFixed = True ' 内容を固定
  End With
  
  oText.insertTextContent(oText.getEnd(), oField, False)
End Sub
}}
*** 章 [#fceec466]
現在の章データを表示。
#code(basic){{
Sub insert_Chapter_field
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.Chapter")
  With oField
    .ChapterFormat = com.sun.star.text.ChapterFormat.NAME
    .Level = 1
  End With
  
  oText.insertTextContent(oText.getEnd(), oField, False)
End Sub
}}
*** 統計 [#c2dcb238]
トータルページ数、段落、語句、文字、表、図、オブジェクト数を表示するフィールド。上記表から利用したいサービスを見付けて下さい。

#code(basic){{
Sub insert_PageCount_field
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.PageCount")
  With oField
    .NumberingType = com.sun.star.style.NumberingType.ARABIC
  End With
  
  oText.insertTextContent(oText.getEnd(), oField, False)
End Sub
}}
*** 日付と時刻 [#bb1682bf]
#code(basic){{
Sub insert_DateTime_field
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.DateTime")
  With oField
    '.DateTimeValue = ... ' 現在以外の場合指定
    .IsDate = True ' 日付データのみを利用
    .NumberFormat = 40 ' 表示形式
    .IsFixed = True ' 固定
    '.Adjust = -10 ' 分の位の調整
  End With
  
  oText.insertTextContent(oText.getEnd(), oField, False)
End Sub
}}
**参照 [#lb947ba0]

*** 参照マークの挿入 [#b5d34b2c]
参照マークを設定します。com.sun.star.text.ReferenceMark サービスのインスタンスをテキストコンテントとして挿入します。挿入するテキスト範囲を置き換える形にするとそのテキスト範囲のテキストを持った参照マークが作成されます。

#code(basic){{
sub InsertReferenceMark
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oMark = oDoc.createInstance("com.sun.star.text.ReferenceMark")
  oMark.setName("Item") ' マーク名を指定
  
  oText.insertTextContent(oViewCursor, oMark, True) ' マークで置換する
end sub
}}

*** 参照マークコンテナ [#aa44905f]
参照マークは ReferenceMarks コンテナで一覧を取得できます。このコンテナで追加や削除はできません。

#code(basic){{
sub ReferenceMarksContainer
  oDoc = ThisComponent
  oReferenceMarks = oDoc.getReferenceMarks()
  
  sNames = oReferenceMarks.getElementNames()
  for i = 0 To UBound(sNames) step 1
    msgbox sNames(i)
    oMark = oReferenceMarks.getByName(sNames(i))
    ' ...
  Next
end sub
}}

*** 参照マークの削除 [#g09c1c99]
参照マークは他のテキストコンテントと同じように削除します。マークを削除するとアンカーされていたテキスト範囲に含まれる文字列も消えてしまいます。

#code(basic){{
sub RemoveReferenceMark
  oDoc = ThisComponent
  oText = oDoc.getText()
  oReferenceMarks = oDoc.getReferenceMarks()
  
  oText.removeTextContent(oReferenceMarks.getByName("Item"))
end sub
}}

*** 参照の挿入 [#n0bf1ad8]
参照マークを挿入して作成したマークを参照して内容またはページ番号などを表示するフィールドを挿入します。挿入後に F9 を押してフィールドを更新しないと内容が表示されません。

#code(basic){{
sub InsertReference
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oReference = oDoc.createInstance("com.sun.star.text.textfield.GetReference")
  oReference.SourceName = "Item"
  oReference.ReferenceFieldPart = com.sun.star.text.ReferenceFieldPart.TEXT
  oReference.ReferenceFieldSource = com.sun.star.text.ReferenceFieldSource.REFERENCE_MARK
  
  oText.insertTextContent(oViewCursor, oReference, False)
end sub
}}

表示する内容の形式は ReferenceFieldPart プロパティに com.sun.star.text.ReferenceFieldPart の定数で指定します。

*** 見出し参照 [#x709c93d]
SourceName が __RefHeading__923_509323855 の様になっていてこれの取得方法が不明。

*** 番号付き段落参照 [#x4f391d4]
__RefNumPara__991_509323855 同上。
*** 図参照 [#l0b95ea0]
SourceName プロパティに "Illustration" を指定します。ReferenceFieldSource プロパティには SEQUENCE_FIELD を指定し、SequenceNumber で図のインデックスを指定します。

#code(basic){{
sub InsertIllustrationReference
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oReference = oDoc.createInstance("com.sun.star.text.textfield.GetReference")
  With oReference
    .SourceName = "Illustration"
    .ReferenceFieldPart = com.sun.star.text.ReferenceFieldPart.ONLY_SEQUENCE_NUMBER
    .ReferenceFieldSource = com.sun.star.text.ReferenceFieldSource.SEQUENCE_FIELD
    .SequenceNumber = 0
  End With
  
  oText.insertTextContent(oViewCursor, oReference, False)
end sub
}}


*** ブックマーク参照 [#kb30257d]
ブックマーク位置を参照します。SourceName プロパティにブックマーク名を指定、ReferenceFieldSource に BOOKMARK を設定します。
#code(basic){{
sub InsertBookmarkReference
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oReference = oDoc.createInstance("com.sun.star.text.textfield.GetReference")
  With oReference
    .SourceName = "parse"
    .ReferenceFieldPart = com.sun.star.text.ReferenceFieldPart.PAGE
    .ReferenceFieldSource = com.sun.star.text.ReferenceFieldSource.BOOKMARK
  End With
  
  oText.insertTextContent(oViewCursor, oReference, False)
end sub
}}
**機能 [#ea94b9a6]

*** 入力フィールド [#sff0b500]
クリックすると入力用ダイアログが開いてユーザーに入力させるフィールド。

#code(basic){{
sub InsertInputField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oField = oDoc.createInstance("com.sun.star.text.textfield.Input")
  With oField
    .Hint = "Hint" ' ヒント
    .Content = "1234" ' 内容
    .Help = "..." ' 内部用
  End With
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}

*** 選択項目 [#yee521a5]
ユーザーがリストから選択するフィールド。

#code(basic){{
sub InsertDropDownField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  sItems = Array("item1", "item2")
  oField = oDoc.createInstance("com.sun.star.text.textfield.DropDown")
  With oField
    .Name = "NamedList"
    .Items = sItems ' リスト
    .SelectedItem = sItems(0) ' 選択された項目
  End With
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}
*** マクロの実行 [#w9f874f1]
マクロを実行するフィールド。

#code(basic){{
sub InsertMacroExecuteField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oReference = oDoc.createInstance("com.sun.star.text.textfield.Macro")
  With oReference
    .MacroName = "vnd.sun.star.script:spi.Module1.Main?language=Basic&location=application" ' マクロ URL
    .Hint = "View Text" ' 表示テキスト
  End With
  
  oText.insertTextContent(oViewCursor, oReference, False)
end sub
}}

*** プレースホルダ [#a73feaed]
テキストや図、表などを挿入させるためのフィールド。挿入する内容の種類は PlaceHolderType プロパティに com.sun.star.text.PlaceholderType の定数で指定します。

#code(basic){{
sub InsertJumpEditField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oField = oDoc.createInstance("com.sun.star.text.textfield.JumpEdit")
  With oField
    .Hint = "Hint" ' ヒント
    .PlaceHolder = "UserText" ' フィールド名
    .PlaceHolderType = com.sun.star.text.PlaceholderType.TEXTFRAME
  End With
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}
*** 組み文字 [#c24197ae]
六文字までを組み合わせた文字を表示するフィールド。

#code(basic){{
sub InsertCombinedCharactersField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oField = oDoc.createInstance("com.sun.star.text.textfield.CombinedCharacters")
  With oField
    .Content = "1234" ' 組み合わせる文字
  End With
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}

*** 隠しテキストフィールド [#e7f97e94]
条件が True のときに非表示になるテキストフィールド。

#code(basic){{
sub ShowHiddenTextField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oField = oDoc.createInstance("com.sun.star.text.textfield.HiddenText")
  With oField
    .Content = "Hidden!" ' 内容
    .Condition = "Hint" ' 条件
  End With
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}
**ドキュメント情報 [#he35574e]
キーワード、コメント、タイトル、テーマ、リビジョン番号、情報は同じようにして挿入できます。利用するフィールドのサービスに従って挿入できる情報が異なります。

#code(ob){{
 Sub field_1
  oDoc = ThisComponent
  oText = oDoc.getText()
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.docinfo.Title")
  
  oText.insertTextContent(oText.getEnd(),oField,False)
 End Sub
}}

作成、前回の印刷、変更フィールドは表示する項目をサービス名で選択できます。上記の表参照。
**変数 [#mfdef299]

*** 変数設定フィールド [#x4231994]
新しい変数を作成します。新しい変数用の FieldMaster.SetExpression を作成、変数名を指定してフィールドに設定します。FieldMaster 名が変数名になります。

#code(basic){{
sub SetVariableField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oFieldMaster = oDoc.createInstance("com.sun.star.text.fieldmaster.SetExpression")
  oFieldMaster.SubType = 0
  oFieldMaster.Name = "Hint" ' 変数名
  
  oField = oDoc.createInstance("com.sun.star.text.textfield.SetExpression")
  With oField
    .Content = "1" ' 現在の値
    .NumberFormat = 0 ' 表示形式指定
  End With
  oField.attachTextFieldMaster(oFieldMaster)
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}

*** 変数表示フィールド [#i0aa37cd]
変数設定フィールドで作成した変数の値を表示するフィールド。Content プロパティに表示する変数名を指定します。

#code(basic){{
sub ShowVariableField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oField = oDoc.createInstance("com.sun.star.text.textfield.GetExpression")
  With oField
    .Content = "Hint"
    .NumberFormat = 0
  End With
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}


*** DDE フィールド [#vb9ecae9]

#code(basic){{
Sub InsertDDELinkField()
  oDoc = ThisComponent
  oText = oDoc.getText()
  oCursor = oText.createTextCursorByRange(oDoc.getCurrentController().getViewCursor())
  
  sName = "hoge"
  sFieldName = "com.sun.star.text.FieldMaster.DDE." & sName
  If NOT oDoc.getTextFieldMasters().hasByName(sFieldName) Then
  oDDEM = oDoc.createInstance("com.sun.star.text.FieldMaster.DDE")
  
  With oDDEM
    .DDECommandType = "soffice"
    .DDECommandFile = ConvertToURL("C:\doc2.ods")
    .DDECommandElement = "Sheet1.A1"
    .Name = sName
  End With
  Else
    oDDEM = oDoc.getTextFieldMasters().getByName(sFieldName)
  End If
  
  oDDEField = oDoc.createInstance("com.sun.star.text.textfield.DDE")
  oDDEField.attachTextFieldMaster(oDDEM)
  
  oText.insertTextContent(oCursor, oDDEField, False)
End Sub
}}
*** 数式フィールド [#rf9758dd]
変数を利用した計算結果を表示するフィールド。SubType に FORMULA を指定します。

#code(basic){{
sub ShowFormulaResultField
  oDoc = ThisComponent
  oText = oDoc.getText()
  oViewCursor = oDoc.getCurrentController().getViewCursor()
  
  oField = oDoc.createInstance("com.sun.star.text.textfield.GetExpression")
  With oField
    .Content = "Hint + 10" ' 計算式
    .NumberFormat = 0
    .SubType = com.sun.star.text.SetVariableType.FORMULA
  End With
  
  oText.insertTextContent(oViewCursor, oField, False)
end sub
}}
*** 連番 [#i26173dc]
図や表などの番号を通しで付けるときに使うフィールド。TextFieldMaster を利用して通し番号の方法などが管理されます。

|フィールドマスタ|変数の種類|h
|com.sun.star.text.fieldmaster.SetExpression.Illustration|図|
|com.sun.star.text.fieldmaster.SetExpression.Table|表|
|com.sun.star.text.fieldmaster.SetExpression.Text|テキスト|
|com.sun.star.text.fieldmaster.SetExpression.Drawing|図形描写|

以下の例では表の通し番号を挿入しています。フィールドマスタでは区切り記号 NumberingSeparator や章番号付け ChapterNumberingLevel プロパティを指定できます。これらはドキュメント全体で一定のものが利用されるため一度変更すると他のフィールドにも影響を及ぼします。

#code(basic){{
 Sub insertfield
  oDoc = ThisComponent
  oText = oDoc.getText()
  oFieldMaster = oDoc.getTextFieldMasters().getByName( _
      "com.sun.star.text.fieldmaster.SetExpression.Table")
  oFieldMaster.NumberingSeparator = " "
  oFieldMaster.ChapterNumberingLevel = 2
  
  oField = oDoc.createInstance( _
      "com.sun.star.text.textfield.SetExpression")
  oField.NumberFormat = 4
  oField.IsFixedLanguage = False
  oField.attachTextFieldMaster(oFieldMaster)
  
  oText.insertTextContent(oText.getEnd(), oField, False)
 End Sub
}}

テキストに挿入する前にフィールドのインスタンスに attachTextFieldMaster メソッドで利用するフィールドマスターを設定しなければエラーになります。
**データベース [#x30e53a5]

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