Tracをプロジェクタ等で見ながらの進捗の報告がゆるされない職場ってまだまだありますよね.そういう場合は,何らかのレポートを作成することになりますが,せっかくXMLRPCでアクセスするクラスモジュールを作ったので,それを使って作ってみました.出力画面は次のようになります.

XMLRPCで接続して各種日付の情報から次の順番でレポートを作成していきます.
- 期間内にクローズ済みのチケット
- 作業中のチケット
- 開始予定のチケット
ちゃんとしたTracのプロジェクトではないので上の例ではわかりにくいと思いますが,その中にはsummary, id, due_assign, due_close, complete, descriptionを二行で追加しています.そのサンプルを次に貼り付けます.
Dim trac As TracXMLRPC
Dim s As Worksheet
Dim owner As String
Function initSheet(dBefore As String, dReport As String, dNext As String) As Integer
s.Cells(1, 3).value = "作業進捗報告"
s.Cells(1, 3).HorizontalAlignment = xlCenter
s.Cells(2, 4).value = "報告日:" & dReport
s.Cells(2, 4).HorizontalAlignment = xlRight
s.Cells(3, 4).value = "期間:" & dBefore & " - " & dNext
s.Cells(3, 4).HorizontalAlignment = xlRight
s.Cells(4, 4).value = "報告者:"
s.Cells(4, 4).HorizontalAlignment = xlRight
initSheet = 5
s.Range(s.Rows(initSheet), s.Rows(65536)).Delete xlUp
End Function
Public Function importClosedTickets(row As Integer, pre As String, dStart As String) As Integer
Dim t1 As Collection
Dim query As String
query = "<string>status=closed&owner=" & owner & "</string>"
Set t1 = trac.queryTicket(query)
Dim no As Integer
no = 1
On Error Resume Next
For Each t In t1
due_assign = due_close = complete = ""
due_assign = t.Item("due_assign")
due_close = t.Item("due_close")
complete = t.Item("complete")
If due_close >= dStart Then '前回報告日以後にクローズされているなら
s.Cells(row, 2).value = pre & no & ". " & t.Item("summary") & "(" & t.Item("id") & ")"
work = due_assign & "-" & due_close
If complete <> "" Then work = work & "(" & complete & "%)"
s.Cells(row, 4).value = work
s.Cells(row, 4).HorizontalAlignment = xlRight
row = row + 1
work = ""
work = t.Item("description")
work = Replace(work, "[[BR]]", vbCrLf)
s.Cells(row, 3).value = work
row = row + 1
no = no + 1
End If
Next
On Error GoTo 0
importClosedTickets = row
End Function
Public Function importWorkingTickets(row As Integer, pre As String, dReport As String, dEnd As String) As Integer
Dim t1 As Collection
Dim query As String
query = "<string>status!=closed&owner=" & owner & "</string>"
Set t1 = trac.queryTicket(query)
Dim no As Integer
no = 1
On Error Resume Next
For Each t In t1
due_assign = due_close = complete = ""
due_assign = t.Item("due_assign")
due_close = t.Item("due_close")
complete = t.Item("complete")
If due_assign <= dReport Then '報告日以前に開始しているなら
s.Cells(row, 2).value = pre & no & ". " & t.Item("summary") & "(" & t.Item("id") & ")"
work = due_assign & "-" & due_close
If complete <> "" Then work = work & "(" & complete & "%)"
s.Cells(row, 4).value = work
s.Cells(row, 4).HorizontalAlignment = xlRight
row = row + 1
work = ""
work = t.Item("description")
work = Replace(work, "[[BR]]", vbCrLf)
s.Cells(row, 3).value = work
row = row + 1
no = no + 1
End If
Next
On Error GoTo 0
importWorkingTickets = row
End Function
Public Function importDueAssignTickets(row As Integer, pre As String, dReport As String, dEnd As String) As Integer
Dim t1 As Collection
Dim query As String
query = "<string>status!=closed&owner=" & owner & "</string>"
Set t1 = trac.queryTicket(query)
Dim no As Integer
no = 1
On Error Resume Next
For Each t In t1
due_assign = due_close = complete = ""
due_assign = t.Item("due_assign")
due_close = t.Item("due_close")
complete = t.Item("complete")
If due_assign > dReport And due_assign <= dEnd Then '報告日以後で次回報告以前に開始する予定なら
s.Cells(row, 2).value = pre & no & ". " & t.Item("summary") & "(" & t.Item("id") & ")"
work = due_assign & "-" & due_close
If complete <> "" Then work = work & "(" & complete & "%)"
s.Cells(row, 4).value = work
s.Cells(row, 4).HorizontalAlignment = xlRight
row = row + 1
work = ""
work = t.Item("description")
work = Replace(work, "[[BR]]", vbCrLf)
s.Cells(row, 3).value = work
row = row + 1
no = no + 1
End If
Next
On Error GoTo 0
importDueAssignTickets = row
End Function
Sub createReport()
'進捗報告という名前のシートを変数に設定する.
Set s = Application.ActiveWorkbook.Sheets.Item("進捗報告")
Dim dBefore As String
Dim dReport As String
Dim dNext As String
Dim row As Integer
dBefore = "2009/05/22" '前回報告日
dReport = "2009/05/29" '報告日
dNext = "2009/06/05" '次回報告日
owner = "u-z" '担当者
Set trac = New TracXMLRPC
trac.init "http://localhost/trac", "test3", "admin", "admin"
row = initSheet(dBefore, dReport, dNext) '
s.Cells(row, 1).value = "1. 期間内にクローズ済みのチケット"
row = importClosedTickets(row + 1, "1.", dBefore)
s.Cells(row, 1).value = "2. 作業中のチケット"
row = importWorkingTickets(row + 1, "2.", dReport, dNext)
s.Cells(row, 1).value = "3. 開始予定のチケット"
row = importDueAssignTickets(row + 1, "3.", dReport, dNext)
s.Cells(row + 1, 1).value = "以上"
End Sub
確認手順
- あたらしいExcelファイルを作成
- VBEditorでTracXMLRPC.clsをインポート
- 上のサンプルをどこか(TishWorkBookとか)に貼り付け
- どれかのシート名を”進捗報告”に変更するか追加する
- 日付やowner等を適切に変更
- createReportを実行
でどうでしょう.
最近のコメント