RedmineからCSVファイルをダウンロード

RedmineからCSVファイルをダウンロードします。
パラメータは以下の通りです。URLは本場Redmineのプロジェクトを使用させていただきます。
取得したい項目や、絞り込み条件などはカスタムクエリで選定します。
APIキーを使用する場合は、B4に記載を行ってください。(今回の例は無し)

【サンプルプログラム】

Option Explicit

Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

Sub GetRedmine()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim url As String
    Dim query_id As Long
    Dim api_key As String
    Dim download_file As String
    Dim result As Long

    Set wb = Application.ThisWorkbook()
    Set ws = wb.Sheets(1)

    ' 設定を取得
    url = ws.Range("B2")            ' Redmine url
    query_id = Val(ws.Range("B3"))  ' カスタムクエリNo.
    api_key = ws.Range("B4")        ' API Key
    download_file = ws.Range("B5")  ' ダウンロード

    ' ファイルをダウンロードする
    result = RedmineDownloadFile(url, query_id, api_key, download_file)
End Sub

【関数化】

' ------------------------------------------------------------
' 説明:Redmine の URL を指定してファイルをダウンロード
' 引数:1:RedmineのURL
'       2:カスタムクエリNo.
'       3:API Key
'       4:ダウンロードファイル名
' 戻値:S_OK(0):ダウンロードが成功したことを示します。
'       E_OUTOFMEMORY(0x8007000E):メモリ不足による失敗を示します。
'       INET_E_DOWNLOAD_FAILURE(0x800C0008):ダウンロードの失敗を示します。
' ------------------------------------------------------------
Function RedmineDownloadFile(url As String, query_id As Long, api_key As String, filename As String) As Long
    
    Dim url_path As String
    
    If api_key <> "" Then
        ' APIキーが必要な場合
        url_path = url & "?query_id=" & query_id & "&key=" & api_key
    Else
        ' APIキーが不要な場合
        url_path = url & "?query_id=" & query_id
    End If
    
    ' キャッシュクリア
    DeleteUrlCacheEntry url_path
    RedmineDownloadFile = URLDownloadToFile(0, url_path, filename, 0, 0)
End Function

Redmine のAPIキーについては、REST API — Redmine用語解説 を参照してください。

【注意事項】
ダウンロートには、「URLDownloadToFile」を使用します。
この際、32bitと64bitで処理の記載が違ってきます。64bitではDeclare の後に、PtrSafe を付けないとエラーになります。Declare ステートメント (VBA)

Public Declare PtrSafe Function URLDownloadToFile Lib “urlmon” Alias “URLDownloadToFileA” (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long


【修正】
2024/11/04 関数の戻り設定が誤っていたため修正。

コメント