OpenOffice.org Basicでガントチャート
OpenOffice.org Basicを使ってガントチャート作成用マクロ ガントチャートforOOoを開発する手順を紹介していきます。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
チャートの描画 その2

次にsetChartBars関数を作成し、この中で描画に必要な図形の数を数え、足りない図形を追加したり、描画済みで不要な図形を削除したりします。

処理の流れを簡単に説明すると

  1. ドローページの取得および、図形記録用変数の初期化
  2. シート上の図形の名称を確認し、ChartBarNameと等しい場合は図形の種類を確認し、直線と長方形に区分けして変数に記録する
  3. 直線の図形数が描画に必要な数より少ない場合は図形を追加し、多い場合は図形を削除する
  4. 長方形の図形数が描画に必要な数より少ない場合は図形を追加し、多い場合は図形を削除する
となります。実際のコードを下記に示します。

Sub setChartBars
    
    Dim oDrawPage As Object
    Dim oDraw As Object
    
    oDrawPage = oSheet.getDrawPage
    
    Dim cntLine As Integer
    Dim cntRect As Integer
    
    cntLine = 0
    cntRect = 0
    
    Redim Preserve ChartBarLine(0)
    Redim Preserve ChartBarRect(0)
    
    Dim i As Integer
    
    For i = 0 To oDrawPage.getCount - 1
        oDraw = oDrawPage.getByIndex(i)
        
        If oDraw.Name = ChartBarName Then
            
            Select Case oDraw.ShapeType
                Case "com.sun.star.drawing.LineShape"
                    cntLine = cntLine + 1
                    Redim Preserve ChartBarLine(cntLine)
                    ChartBarLine(cntLine) = oDraw
                Case "com.sun.star.drawing.RectangleShape"
                    cntRect = cntRect + 1
                    Redim Preserve ChartBarRect(cntRect)
                    ChartBarRect(cntRect) = oDraw
                Case Else
            End Select
            
        End If
        
    Next i
    
    If cntLine < LineCount Then
        Do
            cntLine = cntLine + 1
            Redim Preserve ChartBarLine(cntLine)
            ChartBarLine(cntLine) = _
                AddShape("com.sun.star.drawing.LineShape", _
                    ChartBarName)
            If cntLine = LineCount Then Exit Do
        Loop
    ElseIf cntLine > LineCount Then
        Do
            oDrawPage.Remove(ChartBarLine(cntLine)
            cntLine = cntLine - 1
            Redim Preserve ChartBarLine(cntLine)
            If cntLine = LineCount Then Exit Do
        Loop
    End If
    
    If cntRect < RectCount Then
        Do
            cntRect = cntRect + 1
            Redim Preserve ChartBarRect(cntRect)
            ChartBarRect(cntRect) = _
                AddShape("com.sun.star.drawing.RectangleShape", _
                    ChartBarName)
            If cntRect = RectCount Then Exit Do
        Loop
    ElseIf cntRect > RectCount Then
        Do
            oDrawPage.Remove(ChartBarRect(cntRect)
            cntRect = cntRect - 1
            Redim Preserve ChartBarRect(cntRect)
            If cntRect = RectCount Then Exit Do
        Loop
    End If
    
End Sub
スポンサーサイト

テーマ:OpenOffice.org - ジャンル:コンピュータ

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://shinob.blog42.fc2.com/tb.php/123-7b9c8f83
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
COPYRIGHT(C) 2004 POWERD BY FC2 ALLRIGHT RESERVED.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。