LoginSignup
6

More than 1 year has passed since last update.

エクセルVBAでRedmineのデータを取得する

Last updated at Posted at 2020-03-23

概要

 Redmineのチケット数が多い場合、ページネーションされるため、無限スクロールで確認したかった。とりあえずチケットの主要な項目をエクセルで一覧できるようにしました。
 抽出ボタンを押すと、同シート6行目以降にデータが書き出されます。ただし、チケット数が多きときはかなり時間が掛かります。プログレスバーを付けるべきかもです。

ui.png

環境

  • Windows 10
  • Excel 2016
  • Redmine 4.1.0

準備

  • Excel
    • 「リボン > 開発 > Visual Basic > ツール > 参照設定 > Microsoft XML v6.0」にチェックをする。
    • リボンに開発タブが無いときは下記を参照ください。
  • Redmine
    • 「個人設定 > 右側のAPIアクセスキー」を確認する。
    • チケットをxmlで開く、もしくはjsonで開く。
      • ブラウザのURL末尾に.xmlを付ける。
      • ブラウザのURL末尾に.jsonを付ける。

コード

:vba
    Dim baseurl As String, targeturl As String
    Dim header As Integer, row As Integer
    Dim min As Integer, max As Integer
    Dim cnt As Integer
    Dim ticketid As String
    Dim dom As Object
    Dim issue As Object

    baseurl = "http://redmine/"
    header = 5
    row = header + 1
    min = 1
    max = 100
    cnt = min

    '[A~G]欄の[row~(max-min+1)]行まで一気にクリアする
    Range(Cells(row, 1), Cells(max - min + 1, 7)).Clear

    Do While Cells(row, 1) = ""

        ticketid = Trim(str(cnt - header))

        'APIアクセスキーなし
        targeturl = baseurl + ticketid + ".xml"
        'APIアクセスキーあり
        'targeturl = baseurl + ticketid + ".xml?key=aaaaaaaaaaaaaaaaaaaa"

        Set dom = CreateObject("MSXML2.DOMDocument")
        dom.async = False
        dom.setProperty "ServerHTTPRequest", True
        dom.Load (targeturl)
        Set issue = dom.ChildNodes.Item(1)

        If Not (issue Is Nothing) Then
            Cells(row, 1) = issue.getElementsByTagName("id").Item(0).text
            Cells(row, 2) = issue.getElementsByTagName("project").Item(0).getAttribute("name")
            Cells(row, 3) = issue.getElementsByTagName("tracker").Item(0).getAttribute("name")
            Cells(row, 4) = issue.getElementsByTagName("status").Item(0).getAttribute("name")
            Cells(row, 5) = issue.getElementsByTagName("priority").Item(0).getAttribute("name")
            Cells(row, 6) = issue.getElementsByTagName("assigned_to").Item(0).getAttribute("name")
            Cells(row, 7) = issue.getElementsByTagName("subject").Item(0).text
            row = row + 1
        End If

        cnt = cnt + 1
        If cnt > max Then
            GoTo 9999
        End If
    Loop
9999

xlsmファイルは下記GitHubへアップしてあります。
https://github.com/i-chiaki/RedmineToExcel.git

参考サイト

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6