OOobbs2/29
質問
すでに作成されているグラフのデータ範囲が A1:B30 となっているのを A1:B20 のように変更したいとき、どうすればいいでしょうか? 回答
Sub Main Dim oDoc As Object, oCharts As Object, oChart As Object oDoc = ThisComponent oCharts = oDoc.getSheets().getByIndex(0).Charts oChart = oCharts.getByName("Object 1").embeddedObject oChart.ChartRangeAddress = "表1.$A$1:.$B$20" executeCommand(".uno:Calculate",oDoc.CurrentController.getFrame()) End Sub Sub executeCommand( sCommand As String, oFrame As Object ) Dim aArr(0) As New com.sun.star.beans.PropertyValue Dim oDispatch As Object oDispatch = CreateUnoService( _ "com.sun.star.frame.DispatchHelper") oDispatch.executeDispatch( _ oFrame, sCommand, "", 0, aArr()) End Sub 変更するだけでは実際のグラフが更新されないので、再計算を実行しています。再計算はコマンドで行います。 コマンドによる作業は OOoBasic/Generic/dispatch および OOoBasic/Generic/command? 参照。
感想,コメント,メモ
sub Main rem define variables dim document as object dim dispatcher as object rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem dispatcher.executeDispatch(document, ".uno:StarChartDataDialog", "", 0, Array()) dim args2(3) as new com.sun.star.beans.PropertyValue args2(0).Name = "Name" args2(0).Value = "Object 1" args2(1).Name = "Range" args2(1).Value = "$表1.$A$1:$B$3" args2(2).Name = "ColHeaders" args2(2).Value = false args2(3).Name = "RowHeaders" args2(3).Value = false dispatcher.executeDispatch(document, ".uno:ChangeChartData", "", 0, args2()) end sub 上記コードを BasicIDE から実行すると document 指定にもかかわらず全く動作しませんでした。このコードを実行するのであればその点は注意が必要なようです。ドキュメントのツールメニューから実行するのであれば問題ありませんでした。 表のデータ範囲変更だけなら記録で十分ですね。
|