LoginSignup
2
1

More than 3 years have passed since last update.

ExcelからRedmineのWikiを更新してみた

Last updated at Posted at 2019-09-13

ExcelからRedmineのWikiを更新してみたので。
今更ですが。

前提条件

  • Redmineに対する知識
  • ExcelおよびVBAに対する知識

コード

これはbase_urlで運用しているRedmineのプロジェクトproject_id下のWikiをAPIアクセスキーacc_keyを使ってTextile形式のテキストwiki_textでガツンと書き換えます。

※APIアクセスキーはRedmineのユーザー設定から取得しておくこと。

Excel表をTextile形式に変換するのは拙稿をご参考に。


'Wiki更新
Sub UpdateWiki(base_url as String, project_id as String, acc_key as String, wiki_text as String)

    Dim uri As String
    uri = base_url & "/projects/" & project_id & "/wiki/Wiki.xml?key=" & acc_key

    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "PUT", uri, False

    http.setRequestHeader "Accept", "application/xml"
    http.setRequestHeader "Content-Type", "text/xml"
    http.send CVar("<?xml version=""1.0""?><wiki_page><text>" & wiki_text & "</text></wiki_page>")

    Set http = Nothing

End Sub

Wiki以外を書き換える場合は、uriに指定しているWiki.xmlの部分を変更してください。
部分修正する場合はxmlでGETしてtext要素をパースしてから対応することになります。

参考

あとがき

ログインせずにボタン一発で更新できるってとっても便利。

あと、どなたかユーザー一覧の取得方法をご教示ください。できればVBAで。

GET /users.xml

だと表示数制限にかかってしまって、全員(100名超)は取れないんです。

追記

引数wiki_textに"<"や">"が混入していると、sendした後に

400 Bad Request

のエラーを突きつけられるので、

Private Function EscapeHTML(Text) As String
    Dim Result As String
    Result = Replace(Text, "&", "&amp;")
    Result = Replace(Result, "<", "&lt;")
    Result = Replace(Result, ">", "&gt;")
    EscapeHTML = Result
End Function

(出典: https://gist.github.com/nanbu/1183384)

などを使ってwiki_textをエスケープしてやる必要があります。

2
1
0

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
2
1