Home > C# > 目的別資料 > Office文書の操作 > Libre Office

Automationブリッジ

新規作成日 2017-03-29
最終更新日

Automation Bridge

OpenOffice.orgソフトウェアは、Microsoftのオートメーション技術をサポートしています。これにより、プログラマーは、外部プログラムからオフィスを制御することができる開発者が選択するのための効率的なIDEの範囲と利用可能なツールがあります。

オートメーションは、言語に依存しません。しかしながら、それぞれのコンパイラやインタプリタは、オートメーションをサポートする必要があります。コンパイラは、ソース・コードを、Automation互換コンピュータ命令に変換します。例えば、文字列とあなたの言語の配列型は、BSTRとSAFEARRAYのAutomationの内部表現を気にすることなく、使用することができます。OpenOffice.orgを制御するクライアント・プログラムは、実行可能ファイル(Visual Basic、C++)やスクリプト(JScript、VBスクリプト)によって表現することができます。後者は、スクリプト(例えば、Windows Scripting Host(WSH)やInternet Explorer)を実行するための追加のプログラムを必要とします。

UNOは、類似点はありますが、AutomationとCOMと互換性があるように設計されていませんでした。Automationブリッジによって、OpenOffice.orgが展開する橋渡しの仕組みは、UNOとAutomation動作を一緒に作成するために提供されます。ブリッジは、UNOサービスから構成されていますが、OpenOffice.orgのAutomationクライアントを記述するための特別な知識は必要ありません。詳細については、ブリッジ・サービスを確認して下さい。

異なる言語には、それぞれ異なる機能があります。使用されている言語に応じて、同じタスクが処理される方法には、違いがあります。Visual Basic、VB ScriptとJScriptの例が、提供されています。言語が特別な取り扱いを必要とする、あるいは、性質を認識しているとき、表示します。Automationは、言語間で動作しますが、ブリッジやコーディングのスタイルで、特定な扱いを必要とする微妙なところがあります。例えば、JScriptは、outパラメータを知らないため、Arrayオブジェクトを使用する必要があります。現在、ブリッジは、他の言語でも同様に使用することができますが、C++、JScript、VBScriptとVisual Basicで検証されています。

名前のAutomation Bridgeは、Automation技術を使用している事を示しています。Automationは、一般に、ActiveXやOLEと呼ばれる技術のコレクションの一部です。したがって、OLEブリッジという用語は誤解を招くので、避けるべきです。時には、ブリッジは、COMブリッジと呼ばれますが、唯のブリッジによって処理されるIUnknownとIDispatchインターフェースであるため、それは間違っています。

必要条件

Requirements

Automation技術は、Windowsのプラットホーム上のOpenOffice.orgでのみ使用することができます。(Windows 95, 98, NT4, ME, 2000, XP)。Macintosh OSとUNIXには、COM実装がありますが、これらのプラットフォーム上で、Automationをサポートするための努力はなされていません。

Automationを使用することは、すなわち、VBのCreateObject()のような関数やCのCoCreateInstance()を使用して、COMのようなスタイルでオブジェクトを作成することが含まれています。これは、Windowsシステム・レジストリに登録されるOpenOffice.orgオートメーション・オブジェクトを必要とします。この登録は、オフィスが、システムにインストールされるたびに実行されます。登録が行われなかった場合、例えば、バイナリは、特定の場所にコピーされるため、続いて、Automationクライアントは、正しく動作しないか、まったく動作しません。詳細については、「Service Managerコンポーネント」を参照してください。

クイック・ツアー

A Quick Tour

次の例は、Automationによって、OpenOffice.orgの機能にアクセスする方法を示しています。インライン・コメントに注目して下さい。唯一のオートメーション固有の呼び出しは、最初の行のWScript.CreateObject()です。残りは、OpenOffice.org APIの呼び出しです。ヘルパー関数createStruct()とinsertIntoCell()は、リストの最後に表示されます。

  'This is a VBScript example
  'The service manager is always the starting point
  'If there is no office running then an office is started up
  ' これは、VBScriptの例です。サービス管理プログラムは、常に開始位置です。オフィスがない場合、オフィスが起動します。
  Set objServiceManager= WScript.CreateObject("com.sun.star.ServiceManager")
 
  'Create the CoreReflection service that is later used to create structs
  ' 後で、構造体を作成するために使用されるCoreReflectionサービスを作成します。
  Set objCoreReflection= objServiceManager.createInstance("com.sun.star.reflection.CoreReflection")
 
  'Create the Desktop
  '  デスクトップを作成します。
  Set objDesktop= objServiceManager.createInstance("com.sun.star.frame.Desktop")
 
  'Open a new empty writer document
  ' 新しい空のWriter文書を開きます。
  Dim args()
  Set objDocument= objDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, args)
 
  'Create a text object
  ' テキスト・オブジェクトを作成します。
  Set objText= objDocument.getText
 
  'Create a cursor object
  ' カーソル・オブジェクトを作成します。
  Set objCursor= objText.createTextCursor
 
  'Inserting some Text
  ' いくつかのテキストを挿入します。
  ' The first line in the newly created text document.
  objText.insertString objCursor, "新たに作成されたテキスト文書の最初の行。" & vbLf, false
 
  'Inserting a second line
  ' 2つ目の行を挿入します。
  ' Now we're in the second line
  objText.insertString objCursor, "現在、私たちは、2つ目の行にいます", false
 
  'Create instance of a text table with 4 columns and 4 rows
  ' 4列4行のテキスト表のインスタンスを作成する
  Set objTable= objDocument.createInstance( "com.sun.star.text.TextTable")
  objTable.initialize 4, 4
 
  'Insert the table
  ' 表を挿入します
  objText.insertTextContent objCursor, objTable, false
 
  'Get first row
  ' 最初の行を取得します
  Set objRows= objTable.getRows
  Set objRow= objRows.getByIndex( 0)
 
  'Set the table background color
  ' 表の背景色を設定します
  objTable.setPropertyValue "BackTransparent", false
  objTable.setPropertyValue "BackColor", 13421823
 
  'Set a different background color for the first row
  ' 最初の行に、異なる背景色を設定する
  objRow.setPropertyValue "BackTransparent", false
  objRow.setPropertyValue "BackColor", 6710932
 
  'Fill the first table row
  ' 最初の表の行を塗りつぶす
  insertIntoCell "A1","FirstColumn", objTable 'insertIntoCell is a helper function, see below
					 	    ' insertIntoCellは、ヘルパー関数(下記参照)です
  insertIntoCell "B1","SecondColumn", objTable
  insertIntoCell "C1","ThirdColumn", objTable
  insertIntoCell "D1","SUM", objTable
 
  objTable.getCellByName("A2").setValue 22.5
  objTable.getCellByName("B2").setValue 5615.3
  objTable.getCellByName("C2").setValue -2315.7
  objTable.getCellByName("D2").setFormula"sum "
 
  objTable.getCellByName("A3").setValue 21.5
  objTable.getCellByName("B3").setValue 615.3
  objTable.getCellByName("C3").setValue -315.7
  objTable.getCellByName("D3").setFormula "sum "
 
  objTable.getCellByName("A4").setValue 121.5
  objTable.getCellByName("B4").setValue -615.3
  objTable.getCellByName("C4").setValue 415.7
  objTable.getCellByName("D4").setFormula "sum "
 
  'Change the CharColor and add a Shadow
  ' CharColorを変更して、Shadowを追加します
  objCursor.setPropertyValue "CharColor", 255
  objCursor.setPropertyValue "CharShadowed", true
 
  'Create a paragraph break
  ' 段落区切りを作成する
  'The second argument is a com::sun::star::text::ControlCharacter::PARAGRAPH_BREAK constant
  ' 2つ目の引数は、com::sun::star::text::ControlCharacter::PARAGRAPH_BREAK定数です。
  objText.insertControlCharacter objCursor, 0 , false
 
  'Inserting colored Text.
  ' 色のついたテキストを挿入する。
  ' This is a colored Text - blue with shadow
  objText.insertString objCursor, " これは、影のついた青色のテキストです" & vbLf, false
 
  'Create a paragraph break ( ControlCharacter::PARAGRAPH_BREAK).
  ' 段落区切りを作成します(ControlCharacter:PARAGRAPH_BREAK)。
  objText.insertControlCharacter objCursor, 0, false 
 
  'Create a TextFrame.
  ' TextFrameを作成します。
  Set objTextFrame= objDocument.createInstance("com.sun.star.text.TextFrame")
 
  'Create a Size struct.
  ' Size構造体を作成します。
  Set objSize= createStruct("com.sun.star.awt.Size") 'helper function, see below
							  ' ヘルパー関数、下記参照
  objSize.Width= 15000
  objSize.Height= 400
  objTextFrame.setSize( objSize)
 
  ' TextContentAnchorType.AS_CHARACTER = 1
  objTextFrame.setPropertyValue "AnchorType", 1
 
  'insert the frame
  ' フレームを挿入します
  objText.insertTextContent objCursor, objTextFrame, false
 
  'Get the text object of the frame
  ' フレームのテキスト・オブジェクトを取得します。
  Set objFrameText= objTextFrame.getText
 
  'Create a cursor object
  ' カーソル・オブジェクトを作成します。
  Set objFrameTextCursor= objFrameText.createTextCursor
 
  'Inserting some Text
  ' いくつかのテキストを挿入します。
  ' The first line in the newly created text frame.
  objFrameText.insertString objFrameTextCursor, "新しく作成されたテキスト・フレームの最初の行。", _
  false
  ' With this second line the height of the frame raises.
  objFrameText.insertString objFrameTextCursor, _
  vbLf & "この2つ目の行で、フレームの高さを上げます。", false 
 
  'Create a paragraph break
  ' 段落区切りを作成する
  'The second argument is a com::sun::star::text::ControlCharacter::PARAGRAPH_BREAK constant
  ' 2つ目の引数は、com::sun::star::text::ControlCharacter::PARAGRAPH_BREAK定数です。
  objFrameText.insertControlCharacter objCursor, 0 , false
 
  'Change the CharColor and add a Shadow
  ' CharColorを変更して、Shadowを追加します
  objCursor.setPropertyValue "CharColor", 65536
  objCursor.setPropertyValue "CharShadowed", false
 
  'Insert another string
  ' 他の文字列を挿入する
  ' That's all for now !!
  objText.insertString objCursor, " それは、今のところすべてです !!", false
 
  On Error Resume Next
      If Err Then
      '  An error occurred
   MsgBox "エラーが発生"
  End If
 
 
  Sub insertIntoCell( strCellName, strText, objTable) 
      Set objCellText= objTable.getCellByName( strCellName)
      Set objCellCursor= objCellText.createTextCursor
      objCellCursor.setPropertyValue "CharColor",16777215
      objCellText.insertString objCellCursor, strText, false
  End Sub
 
  Function createStruct( strTypeName)
      Set classSize= objCoreReflection.forName( strTypeName)
      Dim aStruct
      classSize.createObject aStruct
      Set createStruct= aStruct
  End Function

このスクリプトは、新しい文書を作成し、必要に応じてオフィスを開始しました。また、スクリプトは、テキストを記述して、表を作成し埋め込み、異なる背景とペンの色を使用しました。オブジェクトは、com.sun.star.ServiceManagerと呼ばれるActiveXコンポーネントとして、1つだけ作成されます。サービス・マネージャは、続いて、他のオブジェクトを順番に提供する追加のオブジェクトを作成するために使用されます。それらのオブジェクトのすべては、機能を提供します。それは、適切な関数とプロパティを呼び出すことによって、使用することができます。開発者は、どのオブジェクトが、望む機能を提供するか、そして、どのように取得するか学ぶ必要があります。「はじめのステップ」のChapterでは、主にプログラマーに利用可能なOpenOffice.orgオブジェクトを紹介します。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」