create a new page, using OOoBasic/Tutorial/kakeibo/tutorial as a template.
Front page
Search
掲示板
Reload
Help
Browse Log
掲示板の使い方
OOo 掲示板3
OOo 掲示板2
OOo 掲示板
掲示板
雑談掲示板
New
List of pages
Recent changes
Backup
簡単ヘルプ
整形ルール
Start:
#contents
*家計簿チュートリアル OOo Basic 編 [#d11597cb]
図のような OpenOffice.org Calc のファイルを作成することを...
*IDE [#xf41ee1f]
まずは,チュートリアル用のファイルを作成しましょう。
OpenOffice.org を起動して,メニューの「ファイル」 - 「新...
そして,メニューの「ツール」 - 「マクロ」 - 「マクロ...」...
&ref(kakeibo_tuto_ide1.png,,50%);
すると,こんなダイアログが開きます。
&ref(kakeibo_tuto_ide2.png,,50%);
このダイアログは,マクロを実行したり,モジュールを作成し...
このダイアログで,左側に並んでいるのが「ライブラリ」と「...
左側に並んでいる &ref(kakeibo_tuto_ide3.png); のアイコン...
まず,左側にある「無題1」をみると,すこし右側に「Standard...
「Standard」ライブラリにモジュールを作成してチュートリア...
「新規作成」のボタンをクリックすると,次のようなモジュー...
&ref(kakeibo_tuto_ide6.png);
モジュール名は最初のままの「Module1」を使うことにして,そ...
「OK」ボタンをクリックするとモジュールが作成されて,IDE ...
&ref(kakeibo_tuto_ide7.png,,50%);
この画面でチュートリアルのマクロを作成していきます。
**定義 [#ba76715e]
変数の定義部分です。
Sub kakeibo_tutorial
Dim oDoc As Object, oSheet As Object
Dim oRange As Object
Dim aHeader() As String
Dim oCell As Object
Dim i As Integer
Dim oBorderLine1 As New com.sun.star.table.BorderLine
Dim oBorderLine2 As New com.sun.star.table.BorderLine
Dim oBorderLine3 As New com.sun.star.table.BorderLine
Dim oTableBorder As New com.sun.star.table.TableBorder
Dim oColumn As Object
Dim oLocale As New com.sun.star.lang.Locale
Dim nKey As Long
Dim oNumberFormats As Object
Dim sFormat As String
Dim oStyleFamilies As Object
Dim oCellStyles As Object
Dim oSunStyle As Object, oSatStyle As Object, oNextMonth...
Dim aNewStyles(2) As Object
Dim sNewStyleName(2) As String
Dim oConditionalFormat As Object
Dim aCondition1(2) As New com.sun.star.beans.PropertyValue
Dim aCondition2(2) As New com.sun.star.beans.PropertyValue
Dim aCondition3(2) As New com.sun.star.beans.PropertyValue
この部分については[[補足/定義>../suppliment#g2caaf8e]]で...
**ドキュメント [#l88e91f2]
OpenOffice.org Basic 上で最も重要といえるのがこの部分でし...
oDoc = ThisComponent
変数の定義のところで定義した変数 oDoc にドキュメントオブ...
たったこの一行が OpenOffice.org Basic からドキュメントへ...
ドキュメントに関することはこのドキュメントオブジェクトに...
次の図に OpenOffice.org Calc ドキュメントの構造の概略図を...
&ref(doc_structure.png,,80%);
よく表計算を使っている人は一目瞭然でしょう。ドキュメント...
それぞれのシートには「セル範囲」が属しています。そのセル...
**シートとセル [#v1f4ff2a]
ドキュメントオブジェクトを変数に取得して,ドキュメントに...
***シート [#i05068a1]
まずは,シートです。
Calc ドキュメントには普通はいくつかのシートがあります。そ...
上の図で描かれているように,シートコンテナの下にシートそ...
その個々のシートは,名前とインデックスで管理されています...
シートへアクセスするためにシートオブジェクトを取得してい...
oSheet = oDoc.getSheets().getByIndex(0)
このようにすることで,変数 oSheet にシートオブジェクトを...
詳しく説明すると,
oDoc.getSheets()
の部分で,シートコンテナオブジェクトへアクセスしています...
.getByIndex(0)
の部分です。この getByIndex メソッドの引数の "0" は,取得...
これをつづけて使うことで,シートへアクセスしています。
***セル [#i0e94d7d]
つぎに,セルです。
セルは,ドキュメントの構造を示した図にあるように,シート...
実は,セルといっても複数のセルを含んだ「セル範囲オブジェ...
これは,そのオブジェクトがもつインターフェースの違いから...
詳しく説明する前に,チュートリアルのコードを見てみます。
oRange = oSheet.getCellRangeByName("A1:T50")
変数 oRange にセル範囲オブジェクトを取得しています。この...
ここでは,シートオブジェクト oSheet からセル範囲オブジェ...
「名前」というのは,セル範囲のアドレスを文字列で表す時の...
この ''getCellRangeByName'' メソッドはセルまたはセル範囲...
**プロパティー [#k1733d6d]
セル範囲のオブジェクトを取得しました。
オブジェクトというのは,プロパティーを持っています。この...
たとえば,「セルの背景色」,「セルの枠線」,「セル内の文...
***背景色 [#ye844acf]
セルの背景色はセル範囲オブジェクトのもつプロパティーのう...
oRange.CellBackColor = RGB(230,230,255) 'Blue gray
このようにして,セル範囲 oRange の CellBackColor プロパテ...
セルの背景色を設定したら,次に進みます。
項目を用意しておきます。
aHeader() = Array( "収入", "住居費", "光熱費", "消耗品", _
"教育費", "食費", "嗜好品", "教養娯楽", "衣服", _
"交通費", "その他", "支出計", "残高" )
For i = 0 To 12
oSheet.getCellByPosition( 4 + i, 2 ).String = aHeader(i)
Next i
まず,配列 aHeader() に項目を用意しておき,For 文を使って...
oSheet.getCellByPosition( 4 + i, 2 ).String = aHeader(i)
このようにして,セルの String プロパティーは文字列を設定...
***セルの回転 [#pce4a8f2]
つぎは,セルの回転です。回転させるセルをまずオブジェクト...
oRange = oSheet.getCellRangeByPosition( 4, 2, 14, 2 ) ...
そして,範囲 oRange を回転させるために RotateAngle プロパ...
With oRange
.RotateAngle = 4500
.HoriJustify = com.sun.star.table.CellHoriJustify.CE...
End With
ここでは,With ステートメントを使って複数のことを行ってい...
まず,回転の RotateAngle プロパティーは回転させる角度を 1...
oRange.RotateAngle = 4500
としてもいいです。
***横および縦方向のそろえ [#xdab042e]
そして,次に横方向のそろへを行っています。
With oRange
.RotateAngle = 4500
.HoriJustify = com.sun.star.table.CellHoriJustify.CE...
End With
の三行目の部分です。
oRange.HoriJustify = com.sun.star.table.CellHoriJustify....
と同じことです。この HoriJustify プロパティーに設定できる...
この enum ですが,IDL Reference マニュアルをみなければ分...
***枠線 [#z8d84785]
枠線を引きます。対応する部分はしたのとおりです。
With oBorderLine1
.Color = RGB(230, 230, 255)
.OuterLineWidth = 2 '0.05 pt
End With
With oTableBorder
.IsLeftLineValid = True
.IsRightLineValid = True
.IsVerticalLineValid = True
.LeftLine = oBorderLine1
.RightLine = oBorderLine1
.VerticalLine = oBorderLine1
End With
ここで,始めの With ステートメントと二つ目の With ステー...
まず,初めの部分です。
With oBorderLine1
.Color = RGB(230, 230, 255)
.OuterLineWidth = 2 '0.05 pt
End With
この部分では,変数 oBorderLine1 を使用していますが,定義...
Dim oBorderLine1 As New com.sun.star.table.BorderLine
という定義の仕方で変数 oBorderLine1 を定義しています。こ...
struct というのは,構造体と呼ばれるものです。構造体はその...
複数ある BorderLine struct のプロパティーのうち,色を指定...
Color プロパティーは背景色と同じように指定します。
OuterLineWidth は線の幅を 1/100 mm 単位で指定します。たと...
ここまでは,初めの部分について説明しましたが,この部分で...
それでは,後半部分です。ここでは,「線の引き方」を作成し...
With oTableBorder
.IsLeftLineValid = True
.IsRightLineValid = True
.IsVerticalLineValid = True
.LeftLine = oBorderLine1
.RightLine = oBorderLine1
.VerticalLine = oBorderLine1
End With
やはり,ここで登場する oTableBorder も struct として定義...
Dim oTableBorder As New com.sun.star.table.TableBorder
始めの三つのプロパティーの Is...LineValid プロパティーは ...
さらに,後ろの三つの ...Line プロパティーで ... の部分に...
枠線の引き方を作成したら,実際に枠線を描く部分に設定しま...
With oSheet
.getCellRangeByPosition( 4, 2, 14, 2 ).CharColor = R...
.getCellRangeByPosition( 4, 2, 14, 2 ).TableBorder =...
.getCellByPosition( 4, 2 ).CellBackColor = RGB( 92, ...
.getCellRangeByPosition( 5, 2, 14, 2 ).CellBackColor...
RGB( 0, 74, 74 ) 'Turquoise 8
.getCellRangeByPosition( 15, 2, 16, 2 ).HoriJustify ...
com.sun.star.table.CellHoriJustify.RIGHT
End With
抽出すると,
.getCellRangeByPosition( 4, 2, 14, 2 ).TableBorder = oTa...
この部分です。枠線の引き方を設定するのは,TableBorder プ...
この部分のほかの行を見ていきます。
最初の行は,文字の色を指定します。 CharColor プロパティー...
二行目は枠線です。
三行目および四行目は,セルの背景色を指定しています。これ...
最後の行では,セルの横方向のそろへを指定します。これもす...
***セルの幅 [#i6d7947a]
セルの幅を指定しておきます。まず,列オブジェクトを取得し...
oColumn = oSheet.getCellRangeByPosition(0,0,1,0).getCo...
oColumn.Width = 1000
二行目で実際に幅を指定しています。列オブジェクトである oC...
**数書式設定 [#bbcda89c]
次は,数書式設定を行っている部分です。
oCell = oSheet.getCellRangeByName("C3")
oCell.Value = Month( Now )
sFormat = "0月分"
oNumberFormats = oDoc.NumberFormats
nKey = oNumberFormats.queryKey( sFormat, oLocale, fals...
If nKey <> -1 Then
oCell.NumberFormat = nKey
Else
nKey = oNumberFormats.addNew( sFormat, oLocale )
oCell.NumberFormat = nKey
End If
まず,セル C3 のオブジェクトを作成します。
oCell = oSheet.getCellRangeByName("C3")
そして,今月の月を取得して,セルの値に入力します。
oCell.Value = Month( Now )
ここで Now および Month 関数を使っています。両方とも Open...
そして,ここからが数書式設定に関するところです。まず,数...
つぎに,数書式のために必要な数書式のためのオブジェクトを...
oNumberFormats = oDoc.NumberFormats
ここでは,定義した oNumberFormats 変数にオブジェクトを取...
さて,次の行からが重要です。
nKey = oNumberFormats.queryKey( sFormat, oLocale, fals...
この行では,数書式オブジェクトである oNumberFormats のメ...
この queryKey メソッドですが,指定した数書式がないときに...
つづいて,この部分です。
If nKey <> -1 Then
oCell.NumberFormat = nKey
Else
nKey = oNumberFormats.addNew( sFormat, oLocale )
oCell.NumberFormat = nKey
End If
まず,キーが存在するときには, nKey は -1 以外の整数にな...
oCell.NumberFormat = nKey
セルオブジェクト oCell の NumberFormat プロパティーに取得...
また,指定した数書式が存在しない nKey = -1 の時には,新し...
nKey = oNumberFormats.addNew( sFormat, oLocale )
この addNew メソッドは数書式オブジェクトでは新しい数書式...
そして,同じようにキーを使ってセルに数書式を設定します。
oCell.NumberFormat = nKey
さらに,数書式を設定している部分を説明する前にセルの高さ...
**スタイル [#ibb4d658]
oStyleFamilies = oDoc.StyleFamilies
oCellStyles = oStyleFamilies.getByName("CellStyles")
sNewStyleName() = Array( "土曜日", "日曜日", "翌月" )
aNewStyles() = Array( oSatStyle, oSunStyle, oNextMonth )
For i = 0 To 2
If NOT oCellStyles.hasByName(sNewStyleName(i)) Then
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
Else
oCellStyles.removeByName( sNewStyleName(i) )
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
End If
Next i
oSatStyle.CellBackColor = RGB( 153, 204, 255 )
oSunStyle.CellBackColor = RGB( 255, 0, 255 )
With oNextMonth
.CharColor = RGB(230,230,255)
.CellBackColor = RGB(230,230,255)
End With
スタイルを取り扱うためには,スタイルファミリーコンテナオ...
oStyleFamilies = oDoc.StyleFamilies
ドキュメントオブジェクトのプロパティー ''StyleFamilies'' ...
スタイルファミリーコンテナオブジェクト中にはそれぞれのス...
ここではセルのスタイルを利用するので次のようにしてセルス...
oCellStyles = oStyleFamilies.getByName("CellStyles")
次では,新しく作成する「土曜日」,「日曜日」,「翌月」の...
sNewStyleName() = Array( "土曜日", "日曜日", "翌月" )
aNewStyles() = Array( oSatStyle, oSunStyle, oNextMonth )
複数のスタイルを追加するために次のように For 文を利用して...
For i = 0 To 2
If NOT oCellStyles.hasByName(sNewStyleName(i)) Then
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
Else
oCellStyles.removeByName( sNewStyleName(i) )
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
End If
Next i
三つのスタイルについて行うために For 文を利用しています。...
まず始めに ''hasByName'' メソッドを利用してそのスタイルフ...
If NOT oCellStyles.hasByName(sNewStyleName(i)) Then
同じ名前を持つスタイルがなければまずスタイルのためのイン...
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
利用するサービス名は "com.sun.star.style.CellStyle" です。
そして作成したインスタンスをセルスタイルに追加します。追...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
スタイルファミリーに同じ名前のスタイルがすでに存在すると...
oCellStyles.removeByName( sNewStyleName(i) )
この ''removeByName'' メソッドを使用してスタイルを削除し...
スタイルのインスタンスの作成と追加はスタイルが存在しない...
最後にセルスタイルのプロパティーを調整しておきます。
oSatStyle.CellBackColor = RGB( 153, 204, 255 )
oSunStyle.CellBackColor = RGB( 255, 0, 255 )
With oNextMonth
.CharColor = RGB(230,230,255)
.CellBackColor = RGB(230,230,255)
End With
背景色の ''CellBackColor'' および文字の色 ''CharColor'' ...
**条件付書式設定 [#e5bd4862]
条件付書式設定の部分についてです。条件付書式というのは,...
oRange = oSheet.getCellRangeByName("C5:C35")
oConditionalFormat = oRange.ConditionalFormat
aCondition1(0).Name = "Operator"
aCondition1(0).Value = com.sun.star.sheet.ConditionOper...
aCondition1(1).Name = "Formula1"
aCondition1(1).Value = "EOMONTH($Sheet1.$C$5;0)"
aCondition1(2).Name = "StyleName"
aCondition1(2).Value = sNewStyleName(2)
aCondition2(0).Name = "Operator"
aCondition2(0).Value = com.sun.star.sheet.ConditionOper...
aCondition2(1).Name = "Formula1"
aCondition2(1).Value = "WEEKDAY(A1)=7"
aCondition2(2).Name = "StyleName"
aCondition2(2).Value = sNewStyleName(0)
aCondition3(0).Name = "Operator"
aCondition3(0).Value = com.sun.star.sheet.ConditionOper...
aCondition3(1).Name = "Formula1"
aCondition3(1).Value = "WEEKDAY(A1)=1"
aCondition3(2).Name = "StyleName"
aCondition3(2).Value = sNewStyleName(1)
With oConditionalFormat
.clear()
.addNew( aCondition1() )
.addNew( aCondition2() )
.addNew( aCondition3() )
End With
oRange.ConditionalFormat = oConditionalFormat
順をおって説明していきます。
oRange = oSheet.getCellRangeByName("C5:C35")
oConditionalFormat = oRange.ConditionalFormat
まず,条件付書式設定を行うセル範囲オブジェクトを取得しま...
つぎに,条件付書式設定に使うための条件を用意します。ここ...
Dim aCondition1(2) As New com.sun.star.beans.PropertyValue
Dim aCondition2(2) As New com.sun.star.beans.PropertyValue
Dim aCondition3(2) As New com.sun.star.beans.PropertyValue
この定義してある変数を利用して条件を作成していきます。こ...
三つの com.sun.star.beans.PropertyValue にそれぞれ名前と...
aCondition1(0).Name = "Operator"
aCondition1(0).Value = com.sun.star.sheet.ConditionOper...
aCondition1(1).Name = "Formula1"
aCondition1(1).Value = "EOMONTH($Sheet1.$C$5;0)"
aCondition1(2).Name = "StyleName"
aCondition1(2).Value = sNewStyleName(2)
aCondition2(0).Name = "Operator"
aCondition2(0).Value = com.sun.star.sheet.ConditionOper...
aCondition2(1).Name = "Formula1"
aCondition2(1).Value = "WEEKDAY(A1)=7"
aCondition2(2).Name = "StyleName"
aCondition2(2).Value = sNewStyleName(0)
aCondition3(0).Name = "Operator"
aCondition3(0).Value = com.sun.star.sheet.ConditionOper...
aCondition3(1).Name = "Formula1"
aCondition3(1).Value = "WEEKDAY(A1)=1"
aCondition3(2).Name = "StyleName"
aCondition3(2).Value = sNewStyleName(1)
そして,条件付書式を作成します。
With oConditionalFormat
.clear()
.addNew( aCondition1() )
.addNew( aCondition2() )
.addNew( aCondition3() )
End With
まず,''clear'' メソッドで条件を初期化します。つぎに条件...
最後にセル範囲に条件付書式設定を適用して終わりです。
oRange.ConditionalFormat = oConditionalFormat
**オートフィル [#yff639ce]
OpenOffice.org Calc で連続した値を入力するときなどに使用...
With oSheet
.getCellRangeByName( "C4" ).String = "前月より"
.getCellRangeByName( "C37" ).String = "合計"
.getCellRangeByName( "C4:C37" ).HoriJustify = _
com.sun.star.table.CellHoriJustify.CENTER
.getCellRangeByName( "P5" ).Formula = "=SUM(F5;O5)"
.getCellRangeByName( "Q5" ).Formula = "=Q4+E5-P5"
.getCellRangeByName( "E37" ).Formula = "=SUM(E5;E35)"
.getCellRangeByName("P5:P35").fillAuto( com.sun.star.s...
.getCellRangeByName("Q5:Q35").fillAuto( com.sun.star.s...
.getCellRangeByName("E37:P37").fillAuto( com.sun.star....
End With
End Sub
オートフィルの前に,表の項目名を入力して中央ぞろへにしま...
.getCellRangeByName( "C4" ).String = "前月より"
.getCellRangeByName( "C37" ).String = "合計"
.getCellRangeByName( "C4:C37" ).HoriJustify = _
com.sun.star.table.CellHoriJustify.CENTER
中央ぞろへはセル範囲のプロパティーの ''HoriJustify'' プロ...
そして,数式をセルに入力しておきます。
.getCellRangeByName( "P5" ).Formula = "=SUM(F5;O5)"
.getCellRangeByName( "Q5" ).Formula = "=Q4+E5-P5"
.getCellRangeByName( "E37" ).Formula = "=SUM(E5;E35)"
最後にオートフィルですが,これには fillAuto メソッドを利...
.getCellRangeByName("P5:P35").fillAuto( com.sun.star.s...
.getCellRangeByName("Q5:Q35").fillAuto( com.sun.star.s...
.getCellRangeByName("E37:P37").fillAuto( com.sun.star....
**完成 [#u46f154f]
これで完成です。
End:
#contents
*家計簿チュートリアル OOo Basic 編 [#d11597cb]
図のような OpenOffice.org Calc のファイルを作成することを...
*IDE [#xf41ee1f]
まずは,チュートリアル用のファイルを作成しましょう。
OpenOffice.org を起動して,メニューの「ファイル」 - 「新...
そして,メニューの「ツール」 - 「マクロ」 - 「マクロ...」...
&ref(kakeibo_tuto_ide1.png,,50%);
すると,こんなダイアログが開きます。
&ref(kakeibo_tuto_ide2.png,,50%);
このダイアログは,マクロを実行したり,モジュールを作成し...
このダイアログで,左側に並んでいるのが「ライブラリ」と「...
左側に並んでいる &ref(kakeibo_tuto_ide3.png); のアイコン...
まず,左側にある「無題1」をみると,すこし右側に「Standard...
「Standard」ライブラリにモジュールを作成してチュートリア...
「新規作成」のボタンをクリックすると,次のようなモジュー...
&ref(kakeibo_tuto_ide6.png);
モジュール名は最初のままの「Module1」を使うことにして,そ...
「OK」ボタンをクリックするとモジュールが作成されて,IDE ...
&ref(kakeibo_tuto_ide7.png,,50%);
この画面でチュートリアルのマクロを作成していきます。
**定義 [#ba76715e]
変数の定義部分です。
Sub kakeibo_tutorial
Dim oDoc As Object, oSheet As Object
Dim oRange As Object
Dim aHeader() As String
Dim oCell As Object
Dim i As Integer
Dim oBorderLine1 As New com.sun.star.table.BorderLine
Dim oBorderLine2 As New com.sun.star.table.BorderLine
Dim oBorderLine3 As New com.sun.star.table.BorderLine
Dim oTableBorder As New com.sun.star.table.TableBorder
Dim oColumn As Object
Dim oLocale As New com.sun.star.lang.Locale
Dim nKey As Long
Dim oNumberFormats As Object
Dim sFormat As String
Dim oStyleFamilies As Object
Dim oCellStyles As Object
Dim oSunStyle As Object, oSatStyle As Object, oNextMonth...
Dim aNewStyles(2) As Object
Dim sNewStyleName(2) As String
Dim oConditionalFormat As Object
Dim aCondition1(2) As New com.sun.star.beans.PropertyValue
Dim aCondition2(2) As New com.sun.star.beans.PropertyValue
Dim aCondition3(2) As New com.sun.star.beans.PropertyValue
この部分については[[補足/定義>../suppliment#g2caaf8e]]で...
**ドキュメント [#l88e91f2]
OpenOffice.org Basic 上で最も重要といえるのがこの部分でし...
oDoc = ThisComponent
変数の定義のところで定義した変数 oDoc にドキュメントオブ...
たったこの一行が OpenOffice.org Basic からドキュメントへ...
ドキュメントに関することはこのドキュメントオブジェクトに...
次の図に OpenOffice.org Calc ドキュメントの構造の概略図を...
&ref(doc_structure.png,,80%);
よく表計算を使っている人は一目瞭然でしょう。ドキュメント...
それぞれのシートには「セル範囲」が属しています。そのセル...
**シートとセル [#v1f4ff2a]
ドキュメントオブジェクトを変数に取得して,ドキュメントに...
***シート [#i05068a1]
まずは,シートです。
Calc ドキュメントには普通はいくつかのシートがあります。そ...
上の図で描かれているように,シートコンテナの下にシートそ...
その個々のシートは,名前とインデックスで管理されています...
シートへアクセスするためにシートオブジェクトを取得してい...
oSheet = oDoc.getSheets().getByIndex(0)
このようにすることで,変数 oSheet にシートオブジェクトを...
詳しく説明すると,
oDoc.getSheets()
の部分で,シートコンテナオブジェクトへアクセスしています...
.getByIndex(0)
の部分です。この getByIndex メソッドの引数の "0" は,取得...
これをつづけて使うことで,シートへアクセスしています。
***セル [#i0e94d7d]
つぎに,セルです。
セルは,ドキュメントの構造を示した図にあるように,シート...
実は,セルといっても複数のセルを含んだ「セル範囲オブジェ...
これは,そのオブジェクトがもつインターフェースの違いから...
詳しく説明する前に,チュートリアルのコードを見てみます。
oRange = oSheet.getCellRangeByName("A1:T50")
変数 oRange にセル範囲オブジェクトを取得しています。この...
ここでは,シートオブジェクト oSheet からセル範囲オブジェ...
「名前」というのは,セル範囲のアドレスを文字列で表す時の...
この ''getCellRangeByName'' メソッドはセルまたはセル範囲...
**プロパティー [#k1733d6d]
セル範囲のオブジェクトを取得しました。
オブジェクトというのは,プロパティーを持っています。この...
たとえば,「セルの背景色」,「セルの枠線」,「セル内の文...
***背景色 [#ye844acf]
セルの背景色はセル範囲オブジェクトのもつプロパティーのう...
oRange.CellBackColor = RGB(230,230,255) 'Blue gray
このようにして,セル範囲 oRange の CellBackColor プロパテ...
セルの背景色を設定したら,次に進みます。
項目を用意しておきます。
aHeader() = Array( "収入", "住居費", "光熱費", "消耗品", _
"教育費", "食費", "嗜好品", "教養娯楽", "衣服", _
"交通費", "その他", "支出計", "残高" )
For i = 0 To 12
oSheet.getCellByPosition( 4 + i, 2 ).String = aHeader(i)
Next i
まず,配列 aHeader() に項目を用意しておき,For 文を使って...
oSheet.getCellByPosition( 4 + i, 2 ).String = aHeader(i)
このようにして,セルの String プロパティーは文字列を設定...
***セルの回転 [#pce4a8f2]
つぎは,セルの回転です。回転させるセルをまずオブジェクト...
oRange = oSheet.getCellRangeByPosition( 4, 2, 14, 2 ) ...
そして,範囲 oRange を回転させるために RotateAngle プロパ...
With oRange
.RotateAngle = 4500
.HoriJustify = com.sun.star.table.CellHoriJustify.CE...
End With
ここでは,With ステートメントを使って複数のことを行ってい...
まず,回転の RotateAngle プロパティーは回転させる角度を 1...
oRange.RotateAngle = 4500
としてもいいです。
***横および縦方向のそろえ [#xdab042e]
そして,次に横方向のそろへを行っています。
With oRange
.RotateAngle = 4500
.HoriJustify = com.sun.star.table.CellHoriJustify.CE...
End With
の三行目の部分です。
oRange.HoriJustify = com.sun.star.table.CellHoriJustify....
と同じことです。この HoriJustify プロパティーに設定できる...
この enum ですが,IDL Reference マニュアルをみなければ分...
***枠線 [#z8d84785]
枠線を引きます。対応する部分はしたのとおりです。
With oBorderLine1
.Color = RGB(230, 230, 255)
.OuterLineWidth = 2 '0.05 pt
End With
With oTableBorder
.IsLeftLineValid = True
.IsRightLineValid = True
.IsVerticalLineValid = True
.LeftLine = oBorderLine1
.RightLine = oBorderLine1
.VerticalLine = oBorderLine1
End With
ここで,始めの With ステートメントと二つ目の With ステー...
まず,初めの部分です。
With oBorderLine1
.Color = RGB(230, 230, 255)
.OuterLineWidth = 2 '0.05 pt
End With
この部分では,変数 oBorderLine1 を使用していますが,定義...
Dim oBorderLine1 As New com.sun.star.table.BorderLine
という定義の仕方で変数 oBorderLine1 を定義しています。こ...
struct というのは,構造体と呼ばれるものです。構造体はその...
複数ある BorderLine struct のプロパティーのうち,色を指定...
Color プロパティーは背景色と同じように指定します。
OuterLineWidth は線の幅を 1/100 mm 単位で指定します。たと...
ここまでは,初めの部分について説明しましたが,この部分で...
それでは,後半部分です。ここでは,「線の引き方」を作成し...
With oTableBorder
.IsLeftLineValid = True
.IsRightLineValid = True
.IsVerticalLineValid = True
.LeftLine = oBorderLine1
.RightLine = oBorderLine1
.VerticalLine = oBorderLine1
End With
やはり,ここで登場する oTableBorder も struct として定義...
Dim oTableBorder As New com.sun.star.table.TableBorder
始めの三つのプロパティーの Is...LineValid プロパティーは ...
さらに,後ろの三つの ...Line プロパティーで ... の部分に...
枠線の引き方を作成したら,実際に枠線を描く部分に設定しま...
With oSheet
.getCellRangeByPosition( 4, 2, 14, 2 ).CharColor = R...
.getCellRangeByPosition( 4, 2, 14, 2 ).TableBorder =...
.getCellByPosition( 4, 2 ).CellBackColor = RGB( 92, ...
.getCellRangeByPosition( 5, 2, 14, 2 ).CellBackColor...
RGB( 0, 74, 74 ) 'Turquoise 8
.getCellRangeByPosition( 15, 2, 16, 2 ).HoriJustify ...
com.sun.star.table.CellHoriJustify.RIGHT
End With
抽出すると,
.getCellRangeByPosition( 4, 2, 14, 2 ).TableBorder = oTa...
この部分です。枠線の引き方を設定するのは,TableBorder プ...
この部分のほかの行を見ていきます。
最初の行は,文字の色を指定します。 CharColor プロパティー...
二行目は枠線です。
三行目および四行目は,セルの背景色を指定しています。これ...
最後の行では,セルの横方向のそろへを指定します。これもす...
***セルの幅 [#i6d7947a]
セルの幅を指定しておきます。まず,列オブジェクトを取得し...
oColumn = oSheet.getCellRangeByPosition(0,0,1,0).getCo...
oColumn.Width = 1000
二行目で実際に幅を指定しています。列オブジェクトである oC...
**数書式設定 [#bbcda89c]
次は,数書式設定を行っている部分です。
oCell = oSheet.getCellRangeByName("C3")
oCell.Value = Month( Now )
sFormat = "0月分"
oNumberFormats = oDoc.NumberFormats
nKey = oNumberFormats.queryKey( sFormat, oLocale, fals...
If nKey <> -1 Then
oCell.NumberFormat = nKey
Else
nKey = oNumberFormats.addNew( sFormat, oLocale )
oCell.NumberFormat = nKey
End If
まず,セル C3 のオブジェクトを作成します。
oCell = oSheet.getCellRangeByName("C3")
そして,今月の月を取得して,セルの値に入力します。
oCell.Value = Month( Now )
ここで Now および Month 関数を使っています。両方とも Open...
そして,ここからが数書式設定に関するところです。まず,数...
つぎに,数書式のために必要な数書式のためのオブジェクトを...
oNumberFormats = oDoc.NumberFormats
ここでは,定義した oNumberFormats 変数にオブジェクトを取...
さて,次の行からが重要です。
nKey = oNumberFormats.queryKey( sFormat, oLocale, fals...
この行では,数書式オブジェクトである oNumberFormats のメ...
この queryKey メソッドですが,指定した数書式がないときに...
つづいて,この部分です。
If nKey <> -1 Then
oCell.NumberFormat = nKey
Else
nKey = oNumberFormats.addNew( sFormat, oLocale )
oCell.NumberFormat = nKey
End If
まず,キーが存在するときには, nKey は -1 以外の整数にな...
oCell.NumberFormat = nKey
セルオブジェクト oCell の NumberFormat プロパティーに取得...
また,指定した数書式が存在しない nKey = -1 の時には,新し...
nKey = oNumberFormats.addNew( sFormat, oLocale )
この addNew メソッドは数書式オブジェクトでは新しい数書式...
そして,同じようにキーを使ってセルに数書式を設定します。
oCell.NumberFormat = nKey
さらに,数書式を設定している部分を説明する前にセルの高さ...
**スタイル [#ibb4d658]
oStyleFamilies = oDoc.StyleFamilies
oCellStyles = oStyleFamilies.getByName("CellStyles")
sNewStyleName() = Array( "土曜日", "日曜日", "翌月" )
aNewStyles() = Array( oSatStyle, oSunStyle, oNextMonth )
For i = 0 To 2
If NOT oCellStyles.hasByName(sNewStyleName(i)) Then
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
Else
oCellStyles.removeByName( sNewStyleName(i) )
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
End If
Next i
oSatStyle.CellBackColor = RGB( 153, 204, 255 )
oSunStyle.CellBackColor = RGB( 255, 0, 255 )
With oNextMonth
.CharColor = RGB(230,230,255)
.CellBackColor = RGB(230,230,255)
End With
スタイルを取り扱うためには,スタイルファミリーコンテナオ...
oStyleFamilies = oDoc.StyleFamilies
ドキュメントオブジェクトのプロパティー ''StyleFamilies'' ...
スタイルファミリーコンテナオブジェクト中にはそれぞれのス...
ここではセルのスタイルを利用するので次のようにしてセルス...
oCellStyles = oStyleFamilies.getByName("CellStyles")
次では,新しく作成する「土曜日」,「日曜日」,「翌月」の...
sNewStyleName() = Array( "土曜日", "日曜日", "翌月" )
aNewStyles() = Array( oSatStyle, oSunStyle, oNextMonth )
複数のスタイルを追加するために次のように For 文を利用して...
For i = 0 To 2
If NOT oCellStyles.hasByName(sNewStyleName(i)) Then
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
Else
oCellStyles.removeByName( sNewStyleName(i) )
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
End If
Next i
三つのスタイルについて行うために For 文を利用しています。...
まず始めに ''hasByName'' メソッドを利用してそのスタイルフ...
If NOT oCellStyles.hasByName(sNewStyleName(i)) Then
同じ名前を持つスタイルがなければまずスタイルのためのイン...
aNewStyles(i) = oDoc.createInstance("com.sun.star.s...
利用するサービス名は "com.sun.star.style.CellStyle" です。
そして作成したインスタンスをセルスタイルに追加します。追...
oCellStyles.insertByName( sNewStyleName(i), aNewSty...
スタイルファミリーに同じ名前のスタイルがすでに存在すると...
oCellStyles.removeByName( sNewStyleName(i) )
この ''removeByName'' メソッドを使用してスタイルを削除し...
スタイルのインスタンスの作成と追加はスタイルが存在しない...
最後にセルスタイルのプロパティーを調整しておきます。
oSatStyle.CellBackColor = RGB( 153, 204, 255 )
oSunStyle.CellBackColor = RGB( 255, 0, 255 )
With oNextMonth
.CharColor = RGB(230,230,255)
.CellBackColor = RGB(230,230,255)
End With
背景色の ''CellBackColor'' および文字の色 ''CharColor'' ...
**条件付書式設定 [#e5bd4862]
条件付書式設定の部分についてです。条件付書式というのは,...
oRange = oSheet.getCellRangeByName("C5:C35")
oConditionalFormat = oRange.ConditionalFormat
aCondition1(0).Name = "Operator"
aCondition1(0).Value = com.sun.star.sheet.ConditionOper...
aCondition1(1).Name = "Formula1"
aCondition1(1).Value = "EOMONTH($Sheet1.$C$5;0)"
aCondition1(2).Name = "StyleName"
aCondition1(2).Value = sNewStyleName(2)
aCondition2(0).Name = "Operator"
aCondition2(0).Value = com.sun.star.sheet.ConditionOper...
aCondition2(1).Name = "Formula1"
aCondition2(1).Value = "WEEKDAY(A1)=7"
aCondition2(2).Name = "StyleName"
aCondition2(2).Value = sNewStyleName(0)
aCondition3(0).Name = "Operator"
aCondition3(0).Value = com.sun.star.sheet.ConditionOper...
aCondition3(1).Name = "Formula1"
aCondition3(1).Value = "WEEKDAY(A1)=1"
aCondition3(2).Name = "StyleName"
aCondition3(2).Value = sNewStyleName(1)
With oConditionalFormat
.clear()
.addNew( aCondition1() )
.addNew( aCondition2() )
.addNew( aCondition3() )
End With
oRange.ConditionalFormat = oConditionalFormat
順をおって説明していきます。
oRange = oSheet.getCellRangeByName("C5:C35")
oConditionalFormat = oRange.ConditionalFormat
まず,条件付書式設定を行うセル範囲オブジェクトを取得しま...
つぎに,条件付書式設定に使うための条件を用意します。ここ...
Dim aCondition1(2) As New com.sun.star.beans.PropertyValue
Dim aCondition2(2) As New com.sun.star.beans.PropertyValue
Dim aCondition3(2) As New com.sun.star.beans.PropertyValue
この定義してある変数を利用して条件を作成していきます。こ...
三つの com.sun.star.beans.PropertyValue にそれぞれ名前と...
aCondition1(0).Name = "Operator"
aCondition1(0).Value = com.sun.star.sheet.ConditionOper...
aCondition1(1).Name = "Formula1"
aCondition1(1).Value = "EOMONTH($Sheet1.$C$5;0)"
aCondition1(2).Name = "StyleName"
aCondition1(2).Value = sNewStyleName(2)
aCondition2(0).Name = "Operator"
aCondition2(0).Value = com.sun.star.sheet.ConditionOper...
aCondition2(1).Name = "Formula1"
aCondition2(1).Value = "WEEKDAY(A1)=7"
aCondition2(2).Name = "StyleName"
aCondition2(2).Value = sNewStyleName(0)
aCondition3(0).Name = "Operator"
aCondition3(0).Value = com.sun.star.sheet.ConditionOper...
aCondition3(1).Name = "Formula1"
aCondition3(1).Value = "WEEKDAY(A1)=1"
aCondition3(2).Name = "StyleName"
aCondition3(2).Value = sNewStyleName(1)
そして,条件付書式を作成します。
With oConditionalFormat
.clear()
.addNew( aCondition1() )
.addNew( aCondition2() )
.addNew( aCondition3() )
End With
まず,''clear'' メソッドで条件を初期化します。つぎに条件...
最後にセル範囲に条件付書式設定を適用して終わりです。
oRange.ConditionalFormat = oConditionalFormat
**オートフィル [#yff639ce]
OpenOffice.org Calc で連続した値を入力するときなどに使用...
With oSheet
.getCellRangeByName( "C4" ).String = "前月より"
.getCellRangeByName( "C37" ).String = "合計"
.getCellRangeByName( "C4:C37" ).HoriJustify = _
com.sun.star.table.CellHoriJustify.CENTER
.getCellRangeByName( "P5" ).Formula = "=SUM(F5;O5)"
.getCellRangeByName( "Q5" ).Formula = "=Q4+E5-P5"
.getCellRangeByName( "E37" ).Formula = "=SUM(E5;E35)"
.getCellRangeByName("P5:P35").fillAuto( com.sun.star.s...
.getCellRangeByName("Q5:Q35").fillAuto( com.sun.star.s...
.getCellRangeByName("E37:P37").fillAuto( com.sun.star....
End With
End Sub
オートフィルの前に,表の項目名を入力して中央ぞろへにしま...
.getCellRangeByName( "C4" ).String = "前月より"
.getCellRangeByName( "C37" ).String = "合計"
.getCellRangeByName( "C4:C37" ).HoriJustify = _
com.sun.star.table.CellHoriJustify.CENTER
中央ぞろへはセル範囲のプロパティーの ''HoriJustify'' プロ...
そして,数式をセルに入力しておきます。
.getCellRangeByName( "P5" ).Formula = "=SUM(F5;O5)"
.getCellRangeByName( "Q5" ).Formula = "=Q4+E5-P5"
.getCellRangeByName( "E37" ).Formula = "=SUM(E5;E35)"
最後にオートフィルですが,これには fillAuto メソッドを利...
.getCellRangeByName("P5:P35").fillAuto( com.sun.star.s...
.getCellRangeByName("Q5:Q35").fillAuto( com.sun.star.s...
.getCellRangeByName("E37:P37").fillAuto( com.sun.star....
**完成 [#u46f154f]
これで完成です。
Page: