TracのデータからバーンダウンチャートをExcelで作る
私の場合はできるだけ紙に印刷してみたいので,またまたExcelを使用するということになるのですが,TimingAndEstimate(T&E)プラグインを入れたときに入力ができるようになる項目などなどを利用してバーンダウンチャートを作成します.サーバ側は一つ前の記事のものをTracDependencyPluginに追加しておいたので,それを使います.出来上がる図は次のようになり,バーンダウンチャートしてみれば余計なものがいっぱい入っていますが,ガントチャートの時間変化を,バーンダウンチャート内に表しているものと考えれば,完了日予想に結構使えるはず.これについては,また後日説明を書きます.いつものように,メモレベルですのでお許しを…
バーンダウンチャート
Tracに接続する部分の一部を抜き出すと,次のようにマップの配列を取得できるようにしただけですね.
Public Function getWorkHours(id As Integer) As Collection
Dim funcName As String, params As String
funcName = "dependency.getWorkHours"
params = "<param><value><int>" & id & "</int></value></param>"
Set getWorkHours = getStructArray2(funcName, params)
End FunctionPublic Function executeQuery(query As String, sort As String) As Collection
Dim funcName As String, params As String
funcName = "dependency.executeQuery"
params = "<param><value><string>" & query & "</string></value></param>" & _
"<param><value><string>" & sort & "</string></value></param>"
Set executeQuery = getStructArray2(funcName, params)
End FunctionPublic Function getStructArray2(funcName As String, params As String) As Collection
Dim dataType As String
Dim ret As Collection
Dim t As Date
Set Members = getMember(funcName, params, "struct")
If Members Is Nothing Then
Exit Function
End If
If Members.Length = 0 Then
Exit Function
End If
Set getStructArray2 = New Collection
For i = 0 To Members.Length - 1
Dim d As Collection
Set oNodeList = Members.Item(i).ChildNodes
Set d = New Collection
For j = 0 To oNodeList.Length - 1
Set oValList = oNodeList(j).ChildNodes
n = oValList(0).text '値
v = oValList(1).text '値
nn = oValList(1).ChildNodes(0).nodeName 'ノード名
If nn = "dateTime.iso8601" Then
Dim s As String
s = v
v = convertDate(s) '日付を修正
End If
d.Add v, n 'コレクションに値を追加
' Debug.Print " " & n & "=" & v
Next
If oNodeList.Length <> 0 Then
getStructArray2.Add d
End If
Next
End Function
情報をシートに配置していくところは次のようになります.少し変なのは,日付に二日以上の空きがあった場合は,24h前に一つのデータを追加して,休日をはさんでもグラフの線の傾きがゆるくならないようにしています.ほかのやり方もいろいろあるんですが,一日の区切りをどこにするかとか,決める必要が出てくるのでこうしてあります.
Function createBurndown(trac As TracXMLRPC, bd As Worksheet, id As Integer, row As Integer) As Integer
Dim ticket As Collection
Set ticket = trac.getTicket("" & id)
'先頭の数行の情報を設定します.グラフを作るためには使用していません.
bd.Cells(row, 1).value = ticket.Item("ID")
bd.Cells(row + 1, 1).value = "計画"
bd.Cells(row + 1, 2).value = ticket.Item("baseline_start")
bd.Cells(row + 1, 3).value = ticket.Item("baseline_finish")
bd.Cells(row + 2, 1).value = "予定"
bd.Cells(row + 2, 2).value = ticket.Item("due_assign")
bd.Cells(row + 2, 3).value = ticket.Item("due_close")
bd.Cells(row + 0, 5).value = "説明"
bd.Cells(row + 0, 6).value = ticket.Item("summary")
bd.Cells(row + 1, 5).value = "見積時間"
bd.Cells(row + 1, 6).value = ticket.Item("estimatedhours")
bd.Cells(row + 2, 5).value = "基準時間"
bd.Cells(row + 2, 6).value = ticket.Item("baseline_cost")
bd.Cells(row + 3, 2).value = "残"
bd.Cells(row + 3, 3).value = "合計"
bd.Cells(row + 3, 4).value = "時間"
bd.Cells(row + 3, 5).value = "計画"
bd.Cells(row + 3, 6).value = "予定"
bd.Cells(row + 3, 7).value = "基準"bd.Cells(row + 4, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row + 4, 1).value = ticket.Item("baseline_start")
bd.Cells(row + 4, 5).value = ticket.Item("baseline_cost")
bd.Cells(row + 5, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row + 5, 1).value = ticket.Item("baseline_finish")
bd.Cells(row + 5, 5).value = 0
bd.Cells(row + 6, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row + 6, 1).value = ticket.Item("due_assign")
bd.Cells(row + 6, 6).value = 0
bd.Cells(row + 7, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row + 7, 1).value = ticket.Item("due_assign")
bd.Cells(row + 7, 6).value = ticket.Item("estimatedhours")
bd.Cells(row + 8, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row + 8, 1).value = ticket.Item("due_close")
bd.Cells(row + 8, 6).value = 0
bd.Cells(row + 9, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row + 9, 1).value = ticket.Item("due_close")
bd.Cells(row + 9, 6).value = ticket.Item("estimatedhours")
Dim estimatedhours As Integer
estimatedhours = ticket.Item("estimatedhours")
row = row + 10
Dim t As Collection
Set t = trac.getWorkHours(id)
If t.Count = 0 Then
Exit Function
End If
Dim date1 As Date
date1 = "1900/01/01"
bd.Cells(row, 1).FormulaR1C1 = "=R[1]C-1"
bd.Cells(row, 2).FormulaR1C1 = "=RC[1]"
bd.Cells(row, 3).FormulaR1C1 = "=R[1]C"
bd.Cells(row, 4).value = estimatedhours
bd.Cells(row, 8).value = 0
bd.Cells(row, 7).value = "=R[1]C"
row = row + 1
For i = 1 To t.Count
Dim ct As Collection
Set ct = t.Item(i)
Debug.Print ct.Item("time_iso")
If ct.Item("time_iso") - date1 >= 2# And i > 1 Then
Debug.Print "二日以上の空きがあるので"
date1 = ct.Item("time_iso") - 1#
bd.Cells(row, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row, 1).value = date1
bd.Cells(row, 3).FormulaR1C1 = "=R[-1]C"
bd.Cells(row, 4).FormulaR1C1 = "=R[-1]C"
bd.Cells(row, 8).FormulaR1C1 = "=R[-1]C"
bd.Cells(row, 8).FormulaR1C1 = "=R[-1]C"
bd.Cells(row, 7).FormulaR1C1 = "=R[-1]C"
row = row + 1
End If
date1 = ct.Item("time_iso")
bd.Cells(row, 1).NumberFormatLocal = "m/d;@"
bd.Cells(row, 1).value = ct.Item("time_iso")
bd.Cells(row, 2).value = ct.Item("estimatedhours") - ct.Item("totalhours")
bd.Cells(row, 3).value = ct.Item("estimatedhours")
bd.Cells(row, 7).value = ct.Item("baseline_cost")
bd.Cells(row, 4).value = estimatedhours - ct.Item("totalhours")
bd.Cells(row, 8).value = ct.Item("totalhours")
row = row + 1
Next
createBurndown = row
End Function
実際にcreateBurndownを呼ぶところは次のようになり,Tracの情報の準備と,どのシートのどこに,どのチケットの情報を取ってくるかを決めて関数を呼ぶだけです.
Sub test()
Dim user As String, pw As String, URL As String, projectName As String, query As String
Dim trac As TracXMLRPC
Dim settingSheet As Worksheet
Set settingSheet = Sheet1
URL = settingSheet.Cells(2, 3).value
user = settingSheet.Cells(6, 3).value
pw = settingSheet.Cells(7, 3).value
projectName = settingSheet.Cells(3, 3).value
Set trac = New TracXMLRPC
trac.init URL, projectName, user, pwcreateBurndown trac, Sheet2, 3, 31
End Sub
このマクロを動かして作った,前のグラフの元データは次のようになります.
ここに書いてあるコードはVisualBasicTracConnectorIntegrationにサンプルで登録します.
参照
| 固定リンク
「Trac」カテゴリの記事
- Dockerでkanon(Trac)を動かしてみた2 - イメージの作成(2017.08.27)
- Dockerでkanon(Trac)を動かしてみた(2017.08.27)
- TracLightningにコバンザメしてKanonと同様にPluginをインストールする(2014.04.13)
- kanonをTrac1.0.1+MySQL対応に変更してみた(2013.11.24)
- kanonをTrac1.0.1対応に変更してみた(2013.11.11)
「VBA」カテゴリの記事
- メールで受け取ったファイルをSVNに登録する(2012.01.22)
- VBAでXMLRPCを汎用的に修正してTrac連携をそれに合わせて修正した(2011.10.24)
- Excelの(名前の管理のところの)名前の範囲の編集と,名前の範囲の値から複数選択するフォームとマクロ(2011.06.12)
- 状態遷移図からTracのワークフローを作るマクロにTracの設定の取り込み機能追加(2011.02.28)
- tracのワークフローをExcelの図で作った状態遷移図から作ってみる(2011.02.06)
「Excel」カテゴリの記事
- TracのXMLRPCを使ったExcelのマクロでmilestoneなどの設定を取得/更新する(2011.10.31)
- VBAでXMLRPCを汎用的に修正してTrac連携をそれに合わせて修正した(2011.10.24)
- Excelの(名前の管理のところの)名前の範囲の編集と,名前の範囲の値から複数選択するフォームとマクロ(2011.06.12)
- 状態遷移図からTracのワークフローを作るマクロにTracの設定の取り込み機能追加(2011.02.28)
- tracのワークフローをExcelの図で作った状態遷移図から作ってみる(2011.02.06)
「XMLRPC」カテゴリの記事
- TracのXMLRPCを使ったExcelのマクロでmilestoneなどの設定を取得/更新する(2011.10.31)
- VBAでXMLRPCを汎用的に修正してTrac連携をそれに合わせて修正した(2011.10.24)
- TracのチケットをOutlookに取り込んで表示する.(2010.02.12)
- ユーザ名を漢字で表示するために,Tracユーザの一覧をXMLRPCで取得する(2009.10.18)
- TracのデータからバーンダウンチャートをExcelで作る(2009.10.13)
この記事へのコメントは終了しました。
コメント