Top > OOobbs > 100

OOobbs/100 Edit

  • サマリ: OLEオブジェクトのアクセス方法
  • 環境: Calc
  • 状態: 未解決
  • 投稿者: ウズマキナルト?
  • 投稿日: 2006-05-27 (土) 17:38:42

質問 Edit

CALCのスプレッドシート上にOLEオブジェクト(Writer)を張付けてその中身である文章(テキスト)をooBASICで操作したいのですが、その方法が解りません。 教えていただけないでしょうか?

具体的には、

  1. セルの内容(テキスト)をOLEオブジェクトに書き込む
  2. OLEオブジェクトの内容(テキスト)をセルに書き込む

を行いたいです。

回答 Edit

  • 以前ドキュメントで出来ないようなことを呼んだような気がしたので調べてみませんでしたが,試してみると出来ました。

OLE オブジェクトもドローページにまとめられて他のシェープと同じようになっています。そのシェープの Model プロパティーにアクセスすることで埋め込まれたドキュメントのドキュメントオブジェクトが取得できました。

下のコードでは,Calc にメニューの挿入から OOo のテキストを OLE オブジェクトとして挿入し,文字を入力したものから文字列を取得して Calc ドキュメント上のセルに書き込みます。

Sub Main
Dim oDoc As Object
Dim oDrawPage As Object
Dim oEmbObj As Object
Dim oEmbDoc As Object
Dim oText As Object
Dim sString As String

  oDoc = ThisComponent
  oDrawPage = oDoc.getDrawPages().getByIndex(0)
  
  If oDrawpage.hasElements() Then
    oEmbObj = oDrawPage.getByIndex(0)
    
    'MsgBox oEmbObj.Name
    If oEmbObj.ShapeType = "com.sun.star.drawing.OLE2Shape" Then
      'InputBox "","",LCase(oEmbObj.CLSID)
      If LCase(oEmbObj.CLSID) = "8bc6b165-b1b2-4edd-aa47-dae2ee689dd6" Then
        oEmbDoc = oEmbObj.Model
        oText = oEmbDoc.getText()
        sString = oText.getString()
        oDoc.getSheets().getByIndex(0).getCellByPosition(0,0).String = sString
      End If
    End If
  End If
End Sub

OLE オブジェクトに名前を付けておけば取得するシェープオブジェクトの判断が楽です。

OOo 2.0.3,OOo 1.1.5 では動作しました。

  • はにゃ?? 2006-09-02 (土) 00:33:14


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