Top > OOobbs > 4

OOobbs/4

  • サマリ: Calcのメソッドsortの改造方法
  • 環境: Calc
  • 状態: 解決
  • 投稿者: Dusk?
  • 投稿日: 2004-01-10 (土) 17:50:26

質問

OpenOfficeではないのですが、StarSuite6を7(+Patch1)にアップデートしたらCalcのメソッドsortで並べ替えができなくなりました。ヒントでもかまいませんので、対処方法などを教えていただけないでしょうか。
(1) StarSuite6の時は、下記のコードでsortが動いていました。

range_obj = sheet_obj.getCellRangeByName("A1:C5")
Set descriptors_obj = range_obj.createSortDescriptor()
range_obj.sort(descriptors_obj())

(2) StarSuite7にアップデートしたら並べ替えができなくなったので、ここのURSを参考に下記のようにコードを追加しましたが、解決できません。

Dim sortFields(0) As New com.sun.star.util.SortField
sortFields(0).Field = 0
sortFields(0).SortAscending = True
descriptors_obj(0).Name = "SortFields"
descriptors_obj(0).Value = sortFields()
descriptors_obj(1).Name = "ContainsHeader"
descriptors_obj(1).Value = False

回答

(1) のコードはやはり StarSuite 6 では動きましたが, OpenOffice.org 1.1.0 (StarSuite 7 に相当) では動きませんでした。

(2) のコードを追加されたようですが,そのまま追加するとやはり,動作しなかったので,すこしコードを書き換えて次のようにしてみました。次のコードを試してもらえればと思います。

変更点は, descriptors_obj を getSortDescriptor メソッドで取得せずに Dim で定義した変数を使用 (4 行目)。そこで, (1) の 2 行目をなくして代わりに (2) を加えました。

Sub sort_test
Dim oDoc As Object
Dim sheet_obj As Object, range_obj As Object
Dim descriptors_obj(1) As New com.sun.star.beans.PropertyValue
Dim sortFields(0) As New com.sun.star.util.SortField

 oDoc = ThisComponent
 sheet_obj = oDoc.Sheets(0)
 range_obj = sheet_obj.getCellRangeByName("A1:C5")
 
 sortFields(0).Field = 0
 sortFields(0).SortAscending = True
 descriptors_obj(0).Name = "SortFields"
 descriptors_obj(0).Value = sortFields()
 descriptors_obj(1).Name = "ContainsHeader"
 descriptors_obj(1).Value = False
 range_obj.sort(descriptors_obj())
End Sub

私も getSortDescriptor で SortDescriptor を取得することができると思っていたのですが,うまくいきませんね。ここのページの説明では SortDescriptor の作成は全部手作業 (?) になっているのですが,こちらの方が応用しやすそうです。

d
e
f
a
e

こんな適当な表で試してみただけですが,変更前にはまったく動作しなかったものが動くようになったので大丈夫だと思います。

あっ,ここのページでは OOo Basic とかかれていたり, OpenOffice.org と記述してありますが,本質的に同じものとなっている StarSuite と OpenOffice.org なので,気兼ねなく利用してもらえればと思います。どちらで記述しようか考えたのですが,面倒なので OpenOffice.org に統一していますが。 OOoBasic のページには OpenOffice.org Basic and StarBasic と書いていますし,引越し前のここのページの前身は StarSuite を利用しているころに書いていたページですし ... -- はにゃ?? 2004-01-11 (日) 02:41:36

  • 解決できました。ありがとうございました -- Dusk? 2004-01-12 (月) 18:01:20


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