* com.sun.star.・・・・XCellRange  などの実態や使い方 [#ad26c5b4]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|Mr_Happy|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(普通,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Calc 表計算,faq03,category)|
 |~投稿日|2011-03-31 09:36:34 (木)|
 |~OS|Win7|
 |~依存するページ||
 |~バージョン|#listbox3(3.3.0,faq03,version)|
 
 //////////バグ対策(以降マッチさせない)
 
 ** メッセージ [#c46572f5]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 いつも学ばせていただいております。
 
  com.sun.star.・・・・XCellRange 等
 
 の実態や使い方が全く分かりません。
 ある本では
 
  シートを取得したら「XCellRange」インターフェイスでセルにアクセスできます。
  「XCellRange」はシート中の一定範囲のせるをまとめたもので、
  「getCellByPosition」で位置を指定すると・・・・
 
 と書かれており、以下のマクロを実行してみてください、とあります。
 
  MsgBox ThisComponent.Sheets(0).getCellByPosition(0,0).Value
 
 ここで私が知りたいのは、上の説明で出てきた「XCellRange」がマクロ中にないことです。これはどういうことなのでしょうか。
 「XCellRange」インターフェイスでセルにアクセスできます、とありながら実際のマクロには無い!! 私には不思議で全く意味不明です。
 もともと、sun.com.・・・がわからないですし。
 
 というわけで、少し慣れてきたOOo、次のステップを目指したいのでどなたかご教授をお願いします。
 
 
  
 
 ----
 ***参考になるサイトなど [#ke3b5d13]
 >M.Kamataki (2011-03-31 12:27:35 (木))~
 ~
 まず、OpenOffice.orgのマクロに関しては以下が1次情報です。必ず目を通してください。~
 ~
 OpenOffice.org BASIC プログラミングガイド~
 http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide~
 ~
 OpenOffice.org BASIC プログラミングガイド(英語)~
 http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide~
 (日本語のページは、更新されていない可能性があるので最新情報を英語のページで確認してください)~
 ~
 OpenOffice.org Developer's Guide~
 http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide~
 ~
 日本語のプログラミングガイドのサイトの下の方の「詳細情報」をご覧ください。ご質問と関係するのが「OpenOffice.org API コンポーネント」です。さて、これらのコンポーネントの詳細は以下を見ろと書いてありますね。~
 ~
 API reference~
 http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html~
 ~
 ご質問の「XCellRange」は実は「XCellRangesAccess」の間違いです。「XCellRangesAccess」の「API reference」の説明が以下です。~
 ~
 http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/XCellRangesAccess.html~
 ~
 こちらを見ると、「getCellByPosition」「getCellRangeByPosition」「getCellRangesByName」の使い方がわかるという仕掛けですね。~
 ~
 「com.sun.star…」については、プログラミングガイドの以下のページあたりからお読みください。~
 ~
 OpenOffice.org API について~
 http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/API_Intro~
 ~
 OpenOffice.orgの場合は、情報は確かに少ないですが、「これを見るべき」というものはピンポイントでご指摘できるので、逆に分かりやすいと思っています。~
 
 //
 ***XCellRange [#n59abaa8]
 >はにゃ? (2011-03-31 13:02:16 (木))~
 ~
 ある本を持っていないのではっきりとはしませんが、「シートを取得したら」とあるので com.sun.star.table モジュールの方の XCellRange インターフェースのことのはずです。~
 http://api.openoffice.org/docs/common/ref/com/sun/star/table/XCellRange.html~
 
 //
 ***無題 [#r818e509]
 >tani (2011-03-31 14:16:28 (木))~
 ~
 インターフェース = メソッド集って感じかなーと思います。(そういうレベルの話であってます?)~
 で、Javaとかで実装する際にはメソッドを使う前にインターフェースの指定とかしないといけませんが、basicではサクッと省略して、getCellByPositionとかメソッドだけでいけます。~
 
 //
 ***Re: XCellRange [#d44a7ff6]
 >M.Kamataki (2011-03-31 14:31:33 (木))~
 ~
 はにゃ?さん、フォローありがとうございます。com.sun.star.table モジュールの方でしたか。~
 ~
 API referenceで調べて以下を見るとさらに理解が深まるかと。~
 ~
 http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?FrontPage~
 
 //
 ***大変~2 難しいですね [#mebc60f8]
 >Mr_Happy (2011-03-31 15:51:18 (木))~
 ~
 M.Kamatakiさん、はにゃ? さん 早速ありがとうございます。~
  XCellRangeの件
  interface XCellRangesAccess: getCellByPosition(
                               [in] long  nColumn, [in] long  nRow, [in] long  nSheet)
  interface XCellRange: getCellByPosition(
                               [in] long  nColumn, [in] long  nRow)
 となっていましたが、同じgetCellByPositionでもインターフェイスが違うと引数も違うと言うことなのでしょうかね??~
 ~
 参考頁をざっと見ましたが、難しいですね。今のところ、おおよそチンプンカンプンの初めて見る世界ですね。~
 昔々C言語を独学で始めた時より難しそう。
 まぁ、無理せずぼちぼちゆきます。~
 ~
 時々英語は苦手という質問者がいますが私もその口で・・・~
 ~
 参考頁は写したので、完了にしておきます。
 ~
 
 //
 ***「com.sun.star・・・の指定を省き」 ですか! [#c97a3c6f]
 >Mr_Happy (2011-03-31 16:12:03 (木))~
 ~
 tani さんありがとうございます。~
 ~
  メソッド集って感じかなーと思います。(そういうレベルの話であってます?)
 あってるか否かもよくわからないのです・・・~
  メソッドを使う前にインターフェースの指定とかしないといけませんが、 
  basicではサクッと省略して、
  getCellByPositionとかメソッドだけでいけます。
 此処かもしれませんね、もともとの質問の大意は?・・・~
 つまり、com.sun.star・・・の指定を省き、その下にある~
 getCellByPositionというメソッドを使う、と。~
 
 //
 ***インターフェースの説明 [#v0caf7c3]
 >はにゃ? (2011-03-31 18:45:26 (木))~
 ~
 UNO コンポーネント群は CORBA や Java を知っておれば理解しやすいはずです。OOo Basic での場合にはインターフェースについては以下のページを参照してみてください。~
 http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Modules,_Services_and_Interfaces~
 ~
 com.sun.star.table.XCellRange と com.sun.star.sheet.XCellRangesAccess の両方のインターフェースをサポートしているオブジェクトは見たことがありませんが、次のように利用できます。~
  ThisComponent.getSheets().getCellByPosition(0, 0, 0)
  ThisComponent.getSheets().getByIndex(0).getCellByPosition(0, 0)
 返り値は微妙に違うので注意が必要です。~
 ~
 UNO-言語間のバインディングの実装に依存しますが、Java 用の場合にはインターフェースを指定する必要があります。一方で OOo Basic 用の場合にはその必要はありません。~
 UNO は言語に依存せずにさまざまな言語から利用できるように設計されたため、メソッドのオーバーロードを許容していません。ですが、インターフェースが異なると同名のメソッドがあることがあります。Basic ではこれを区別できないため、インターフェースを指定する方法があります。普段は使う必要がありませんが次のようにします。~
  oDoc.com_sun_star_document_XEventListener_addEventListener(oEventListener)~
 
 //
 #article