Amazonで商品を見るセール会場へ

Redmine│Excelのcsvデータからチケットを作成する方法

Excelの表からRedmineのチケットを作るには、CSVに書き出し、取り込み画面で各列とチケット項目を対応付けます。

CSVを読み込めたことと、意図どおりのチケットが作られたことは別に確認します。

このページの例は、個人情報を含まない練習データで試せます。

練習ブック・CSV・コードをまとめたZIPをダウンロードして、元ファイルとは別のコピーで操作してください。

目次

CSVの準備から取り込み後の確認まで

全体の流れを先に押さえておくと、途中で迷いにくくなります。内容は、このページの練習データと手順にもとづく目安です。実際の画面やバージョンによって、項目名や表示が異なることがあります。

  1. 練習用のZIPをダウンロードし、元のファイルとは別のコピーで操作する。
  2. practice.csv(UTF-8)をExcelで開き、5列・2件になっていることを確認する。文字が崩れる場合は、「データ」→「テキストまたはCSVから」でUTF-8とカンマ区切りを指定する。
  3. Pythonが使える場合は、ローカルでCSVの構造だけを事前に確認する。この検査では、Redmineの権限やトラッカー、必須項目までは確認できない。
  4. 本番とは別の練習用プロジェクトを用意し、「チケット」のインポートからCSVを選ぶ。
  5. 文字コード、区切り、引用符、日付形式を合わせ、CSVの列とRedmineの項目を目視で対応付ける。
  6. 実行前に、プロジェクト、トラッカー、題名、親子関係、通知設定を確認する。通知先が確定していなければ、実行を止める。

取り込みを実行した後は、新しいチケットの題名、説明の改行、日付、プロジェクト、親子関係を確認してください。

スポンサーリンク

入力例:架空の2チケットをCSVにする

ZIPのpractice.csvはUTF-8のCSVです。

先頭行はsubject、description、start_date、due_date、parent_issue_idの5列です。

親チケットの説明にはカンマと改行を含め、2件目のparent_issue_idには1を指定しています。

これは既存チケットIDではなく、今回取り込む最初のチケットを示す指定です。

Excelで開き、データが5列、2件になっていることを確認します。

日本語が崩れる場合は「データ」→「テキストまたはCSVから」でUTF-8とカンマ区切りを指定して読み込みます。

保存はCSV UTF-8を選び、再度読み込んでカンマと改行が説明の中に残っているか確認します。

PythonでCSVの構造だけを事前確認する

Python 3を使う場合は、ZIPのフォルダで python validate_csv.py practice.csv を実行します。

正常ならrowsが2、column_countが5と表示されます。

この検査は通信を行わず、Redmineの権限やトラッカー、必須項目までは確認しません。練習用の5列と、前にある取り込み行を親にする指定だけを受け付けます。担当者などの列を追加したCSVや、既存IDを使う#形式、後続行を親にする指定は、このコードの検査対象外です。検査で拒否されたことだけでRedmineでも使用できないとは判断しないでください。

"""Local CSV structure/date check only. No network or Redmine calls."""
import csv,io,json,sys
from datetime import date
from pathlib import Path
FIELDS=['subject','description','start_date','due_date','parent_issue_id']
def validate(text):
    reader=csv.DictReader(io.StringIO(text.lstrip('\ufeff')),strict=True)
    if reader.fieldnames != FIELDS:
        raise ValueError('Header must be: '+','.join(FIELDS))
    rows=list(reader)
    if not rows:raise ValueError('No data rows')
    for i,r in enumerate(rows,1):
        if None in r or any(v is None for v in r.values()):raise ValueError(f'Row {i}: column count mismatch')
        if not r['subject'].strip():raise ValueError(f'Row {i}: empty subject')
        dates=[]
        for field in ['start_date','due_date']:
            value=r[field]
            if value and (len(value)!=10 or date.fromisoformat(value).isoformat()!=value):raise ValueError(f'Row {i}: use YYYY-MM-DD')
            dates.append(date.fromisoformat(value) if value else None)
        if all(dates) and dates[1]<dates[0]:raise ValueError(f'Row {i}: due date before start date')
        parent=r['parent_issue_id']
        if parent:
            # This exercise intentionally allows only an earlier imported row.
            if not parent.isdecimal() or not 1<=int(parent)<i:raise ValueError(f'Row {i}: parent must be an earlier import position')
    return {'rows':len(rows),'column_count':len(FIELDS),'redmine_import_verified':False}
if __name__=='__main__':
    try:print(json.dumps(validate(Path(sys.argv[1]).read_text('utf-8-sig')),ensure_ascii=False))
    except (ValueError,csv.Error) as exc:sys.exit(str(exc))

Redmineで手動で対応付けを確認する

本番とは別の練習用プロジェクトを用意し、「チケット」のインポートからCSVを選びます。

文字コードはUTF-8、区切りはカンマ、引用符は二重引用符、日付形式はYYYY-MM-DDに合わせます。

プロジェクトと使用できるトラッカーを画面で選びます。

CSV列対応する項目
subject題名
description説明
start_date開始日
due_date期日
parent_issue_id親チケット

最終実行前に、プロジェクト、トラッカー、2件の題名、親子関係、通知設定を確認します。

練習用の通知先が確定していない場合は実行を止めます。

この記事の確認ではチケットの作成や通知送信を行っていません。

項目の対応付けは目視で確認します。

旧版で紹介していた自動選択ブックマークレットは、画面構造や表示名が違うと誤った列を選ぶため、現在の手順では使用しません。

確認結果と切り分け

条件結果
CSVにカンマ・改行が含まれる引用符の中に残り、CSVとして2レコードになる。Redmineでの作成結果は未検証
親番号1今回の最初のチケットを参照する
既存チケットを親にする場合#と既存IDを付ける指定。練習CSVには使っていない
担当者を指定する場合担当可能なユーザーのログイン名を確認して列を追加する
エラーになった作成済み件数と未作成の行を確認し、全件をそのまま再投入しない
再実行したい新規作成なので同じCSVの重複投入に注意する

取り込みを実行した場合は、新しいチケットの題名、説明の改行、日付、プロジェクト、親子関係を確認します。

一部が作成された状態なら、作成結果を記録してから未作成の行を整理します。行を削除すると取り込み内の番号が変わるため、親番号も見直してください。親が作成済みなら#と実際のチケットIDで指定し、親も再取り込みするなら整理後のCSVでの位置を指定します。先頭の見出し行はこの番号に数えません。

CSVの取り込みを通常の「元に戻す」で取り消せるとは考えず、練習プロジェクトの担当者と復旧方法を決めてから実行します。

公式仕様と、この検査の範囲

RedmineのCSV取り込みの公式説明に、列の対応付けと親チケット番号の指定方法があります。

現在の公式ミラーの取り込み実装でも新規チケットを生成する処理を確認しました。

実際の画面や利用環境のバージョンは別に確認が必要です。

2026年10月2日に、練習ブックの数式をArtifact Toolで計算し、CSVをPythonで検証しました。

Excelの実画面での操作、VBAのコンパイル・実行、Redmineへの実際の取り込みは未検証です。

関連記事・旧実装の参考資料

関連記事は用途の違いを確認して参照してください。

練習用ZIPのデータと、記事中のセル番地・コードをそろえています。

スポンサーリンク

よくある質問:Redmine Excelで迷ったときのチェックリスト

CSVの文字が崩れるときは、どうしますか?

Excelの「データ」→「テキストまたはCSVから」で、UTF-8とカンマ区切りを指定して読み込みます。保存するときは、CSV UTF-8を選びます。

説明にカンマや改行が入っていても大丈夫ですか?

このページの練習CSVは、引用符内にカンマと改行を含む2レコードです。Redmineで実際に2件が作成されるかは未検証です。保存後に再度読み込んで、説明の中に残っているかを確認します。

親チケットは、どう指定しますか?

練習CSVでは、2件目のparent_issue_idに1を指定して、今回の最初のチケットを親にします。既存のチケットを親にする場合は、#と既存のIDを付ける指定になります。

エラーになったときは、どうしますか?

作成済みの件数と、未作成の行を確認します。全件をそのまま再投入すると、新規作成なので重複する場合があります。

取り込みは、元に戻せますか?

通常の「元に戻す」で取り消せるとは考えないでください。練習プロジェクトの担当者と、復旧方法を決めてから実行します。

このページの手順は、すべて動作確認済みですか?

いいえ。ページの末尾に書かれているとおり、Excelの実画面での操作とRedmineへの実際の取り込みは未検証です。お使いの環境で、練習プロジェクトを使って確認してください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

仕事効率化のおすすめ書籍

仕事用PCの選び方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次