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

今後の図形の操作を簡単にするため、日付から対象となる列の番号+αを取得するgetColumnIndexByDate関数を作成します。

この関数の戻り値はDouble型となっていて、整数部には列番号、少数部には引数の日付にてセルの単位に満たない部分に関するセル幅の割合を示します。
実際の例を使って説明します。セル単位が一日の場合の「4/8 12:00」を考えてみると、この工程表が4/1から始まっているならば、4/8は左端から数えて7番目の列になります。そして、12:00はちょうど一日の半分なので、セルの半分となります。そこで、戻り値は左端の列番号+7.5ということです。

なぜこんな面倒なことをするのかと言うと、このガントチャートはセルの幅を変更してもその変更に合わせてチャートを描画できるようにするためです。前にいた職場で3週間の工程表を描画する際、真ん中が重要で前後は幅が狭くなっている工程表を利用していました。この経験から、このような工程表を描画することもあり得ると思い、セル幅を変更しても体裁の崩れない構造が必要だと考えています。

Function getColumnIndexByDate(TargetDate As Date) As Double
    
    Dim wk As Double
        
    If TargetDate < oProperty._BeginDate Then
        wk = 0
    ElseIf TargetDate > oProperty._EndDate Then
        wk = oProperty._DrawColumns
    Else
        
        Select Case oProperty._CellUnit
            Case CELLUNIT_DAY
                wk = TargetDate - oProperty._BeginDate
            Case CELLUNIT_WEEK
                wk = (TargetDate - oProperty._BeginDate) / 7
            Case CELLUNIT_10DAYS
                If Day(TargetDate) < 21 Then
                    wk = DateDiff("m", _
                        oProperty._BeginDate, TargetDate) * 3 + _
                        (Day(TargetDate) - 1) / 10
                Else
                    wk = DateDiff("m", _
                        oProperty._BeginDate, TargetDate) * 3 + 2 + _
                        (Day(TargetDate) - 21) / _
                        (Day(getNextMonth(TargetDate) - 1) - 21)
                End If
            Case CELLUNIT_MONTH
                wk = DateDiff("m", _
                    oProperty._BeginDate, TargetDate) + _
                    Day(TargetDate) / _
                    Day(getNextMonth(TargetDate) - 1)
        End Select
    End If
    
    getColumnIndexByDate = wk + _
        oProperty._LeftColumn + ChartHeaderColumns - 1
    
End Function

セルの単位で分岐し、日付から列数を取得する処理を行っています。余りの日数をセルの日数で割ることで、セル幅の割合を計算し、チャートを描画する領域の左端の列を足して、それを戻り値にしています。

スポンサーサイト

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

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