Excel VBA에서 Redmine 데이터 얻기

10602 단어 RedmineExcelVBA

개요



Redmine의 티켓 수가 많은 경우, 페이지 네이션되기 때문에, 무한 스크롤로 확인하고 싶었다. 우선 티켓의 주요 항목을 엑셀로 나열할 수 있도록 했습니다.
추출 버튼을 누르면 같은 시트 6행째 이후에 데이터가 내보내집니다. 단, 티켓 수가 많을 때는 상당히 시간이 걸립니다. 진행률 막대를 추가해야 할 수도 있습니다.



환경


  • 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로 업되어 있습니다.
    htps : // 기주 b. 코 m/이치아키/레 d미네토오 x세 l. 기 t

    참고 사이트

    좋은 웹페이지 즐겨찾기