Microsoft Wordテンプレートに基づく仕様書エクスポート(11月更新)
Requirements & Systems Portal の Python & Rest API を利用して、すべてのデータに完全にアクセスし、Microsoft Word の Merge Fields 機能と組み合わせることで、ワンクリックで要件仕様書を Word ドキュメントにエクスポートできます。この機能により、文書に含める要件フィールドとその配置方法を選択することができます。
マージ フィールドとテンプレート
マージ フィールドは、その名前からデータ フィールドへの参照として使用されます。テンプレート ドキュメントにデータ ソースの値をメール マージすると、データ フィールドの情報がマージ フィールドに置き換わります。
異なるマージフィールドを持つテンプレート文書を作成することで、それらに基づいて同じ種類の出力文書(仕様書など)をすばやく生成することができます。
新しいマージフィールドを作成する
-
編集したいドキュメントを開いて
タブに移動します。Insert -
メニューを開き
メニューを開きQuick Partd .を選択します。Field ダイアログウィンドウが開きます。Field -
フィールド・ダイアログ・メニューで、左側のリストから
を選びます。右側のテキストボックスにマージ・フィールド名を入力しMerge Field をクリックします。Field name .OK
ヒント:追跡しやすいように、置換したいデータに基づいてフィールド名を付けます。 -
マージフィールドがWordファイルに挿入されます。オブジェクトをクリックすると、グレーでハイライトされます。

対応するPython関数がすでに定義されているマージフィールドは以下のとおりです:
「req_id" - 要件識別子 "req_title" - 要件タイトル "req_text" - 要件テキスト "req_state" - 要件の状態 "req_type" - 要件タイプ 「req_rationale" - 要件に関連付けられた理由。 「images" - 要件に添付された画像 「specification_name" - 要件を含む仕様 "section_name" - 要件を含むセクション "req_compliance" - 要件のコンプライアンスステートメント(複数可) "req_comp_comment" - 要件のコンプライアンスコメント "req_owner" - 要件の所有者 "req_applicability" - 要求事項の適用可能性 "req_ver_methods" - 要件の検証方法 "req_ver_m_text" - 要件の検証方法のコメント "req_ver_closeout_ref" - 要件の検証方法のクローズアウトリファレンス "req_ver_status" - 要件検証方法のステータス
テンプレートの作成(テンプレート レプリケーション用)
マージ フィールドを組み合わせて、仕様ドキュメントの生成に使用するテンプレート ファイルを作成できます。
テンプレートの例を以下に示します。あるフィールドは「プレーンテキスト」に、他のフィールドは表の一部として記述されます。この例は、次のセクションで説明するPythonスクリプトの基本例です。

このテンプレートの出力結果は、次の図のようになります。

テンプレートに入力する Python スクリプト
マージ フィールドを入力したテンプレートに基づいてドキュメントを生成するために使用される Python スクリプトは、次のメイン パッケージを使用します:
-
- Requirements & Systems Portal の Python API を使用すると、Requirements & Systems Portal 内のオブジェクトにアクセスして更新することができます。valispace -
- この関数は、Office Open XML(Docx)ファイルに対してメール マージ(マージ フィールドを必要なデータで置き換える)を実行し、Microsoft Office Word をインストールしなくても、どのシステムでも使用できます。docx-mailmerge2 -
- Microsoft Word (.docx) ファイルを作成および更新するための Python ライブラリ。python-docx -
- HTMLをDocxに変換するPythonライブラリ。Requirements & Systems PortalからWordへの書式を維持するために使用されます(太字、斜体、箇条書き...)。htmldocx
コードは3種類の関数に分かれています:
-
- 関数で構成されています。Master functions とmain 関数で構成され、与えられたテンプレートに入力することで、要件を最終的なドキュメントにエクスポートするロジックを持ちます。create_specification_document -
- 要件 タ イ プ、 状態、 画像な ど、 要件デー タ を抽出す る すべての関数です。Requirement data extract functions -
- 空白の除去や、 最終的に生成 さ れ る ド キ ュ メ ン ト 上で表が破損 し ない よ う にす る な書式設定を実行す る 関数。Document "Format" functions
次のサブ章では、 こ れ ら の機能について簡単に説明 し ます。
マスター関数 - Main
この関数では、ユーザーがドメイン名、ユーザー名とパスワード、仕様を生成するプロジェクト識別子、テンプレートファイルへのパスを挿入することができます。
そして、この情報を使って
-
Python API を使用して Requirements & Systems Portal にログインします;
-
仕様書、画像、要件タイプなどのプロジェクト汎用データをダウンロードする;
-
関数を呼び出します。
関数を呼び出す。create_specification_document
マスター関数 - Create_specification_document
この関数は、テンプレートのマージ フィールドに対応する要件データを入力して、仕様ファイルを生成します。
最初に、 選択 し た仕様のすべての要件を収集す る 必要があ り ます:
all_specification_requirements = get_map(api, f "requirements/complete/?project="+str(DEFAULT_VALUES["project"])+"&clean_html=text&clean_text=comment", "id", None, filter_specification)
if len(all_specification_requirements) 1:
print("No requirements for Specification -> "+ specification_data['name']")
リターン
次に、セクションごとに要件データを整理し、セクションのない要件から始めます。
これらの非セクション要件を取得するために、サポート関数 get_requirements_without_section
#第 1 に、セクションを持たない要件をドキュメントに追加します。
no_section_requirements = get_requirements_without_section(all_specification_requirements)
セクション以外の要件がすべて収集されたので、次はマージ フィールドに入力するデータを準備します。このデータは Requirement data extract functions
template_data.append({
"specification_name" : CURRENT_SPECIFICATION["name"] if counter == 1 else ""、
"section_name" : ""、
"req_id" : reqdata['identifier']、
"req_title" : reqdata['title']、
"req_text" : reqdata['identifier']+"_docx"、
"req_type" : req_type、
"req_rationale" : reqdata['comment']、
"req_ver_methods" : req_vms、
"req_applicability" : req_applicability、
"images" : "Images_Placeholder_"+str(requirement) if requirement_with_images == True else "No_Images".
})
マージ フィールドの大部分では、データは直接マッピングされますが imagesreq_text
-
については、 次の よ う にな り ます。
要件に画像があるかどうかを示すフラグが、データとして格納されます。images -
プレースホルダ
の場合、プレースホルダがデータとして格納されます。こ のプ レース ホルダは、 以下の コ ー ド に示す よ う に、 要件テ キ ス ト を HTML か ら Word へパース し た結果を格納す る リ ス ト のキー と し て も 使用 さ れます。req_textdocx_list[reqdata['identifier']+"_docx"] = new_parser.parse_html_string(reqdata['text'])
セクションを持つ要件に対して同じプロセスを繰り返し、それが完了すると、データはテンプレート フィールドにマージされ、新しいファイルとして保存されます:
ドキュメント.merge_templates(template_data, separator='continuous_section') document.write(OUTPUT_FILE)
最後に Document "Format" functions
document2 = ドキュメント(OUTPUT_FILE)
remove_all_but_last_section(document2)
remove_all_empty_headings(document2)
put_html_text(document2, docx_list)
put_images(document2, all_project_images)
keep_tables_on_one_page(document2)
document2.save(OUTPUT_FILE)
print ("作成された仕様書 -> "+ specification_data['name']")
要件データ抽出関数
要件からデータを抽出するために使用できる関数は以下のとおりです:
-
- セクションを除いたすべての要件の並べ替えリストを返すget_requirements_without_section -
- 指定された仕様のすべてのセクションのリストを返します。get_specification_sections -
- 指定されたセクションのすべての要件の並べ替えリストを返します。get_section_requirements -
- すべての要件画像の配列を返します。get_requirement_images -
- 要件の名前を返します。get_requirement_type -
- 要件の名前を返します Stateget_requirement_state -
- 要件の所有者のユーザー グループと姓名を返します。get_requirement_owner -
- すべての要件に該当するブ ロ ッ ク タ イ プの リ ス ト を ";" で分割 し て返 し ます。get_requirement_applicability -
- すべての要件検証方法の名前を ";" で区切って返します。get_requirement_verification_methods -
- 改行で分割 さ れたすべての要件検証方法の名前を返 し ます。get_requirement_verification_methods_newline -
- すべての要件検証メソッドのコメントをダブル改行で区切って返します。get_requirement_verification_methods_comments -
- すべての要件検証方法のステータスを ";" で区切って返します。get_requirement_verification_status -
- 各要件検証メソッドのクローズアウト参照名を ";" で区切って返します。get_requirement_verification_closeout_refs -
- すべての要件の添付ファイル名を ";" で区切って返します。get_requirement_attachments_references -
- 関数の引数として渡された要件の特定のカスタム フィールドの値を返します。get_requirement_custom_field
ドキュメントの「フォーマット」関数
最終ドキュメントの書式設定に使用される関数は次のとおりです:
-
- テーブルが異なるページにまたがってセル内容を持つことを許さないように、最終ドキュメントをフォーマットします。keep_tables_on_one_page -
- 最終文書を書式設定して、空の見出しをすべて削除します。remove_all_empty_headings -
- 複数のセクションではなく、1つのセクションだけを持つように最終文書を書式設定します。remove_all_but_last_section -
- 画像プレースホルダーを各要件の画像に置き換えます。put_images -
- ランのプロパティを別のランにコピーする補助関数(HTMLフォーマットされたテキストのプロパティをコピーするために使用されます)clone_run_props -
- 要件テキスト プレースホルダを、太字、斜体、下線、取り消し線、箇条書きなど、対応する書式付きテキストに置き換えます。put_html_text
最新の汎用テンプレート、Python スクリプト、または実行ファイルをダウンロードする
汎用仕様書作成 Nov2023.py 汎用仕様書テンプレート.docx 要求事項.txt
スクリプトを実行する前に編集すること
スクリプトの作成からドキュメントの生成まで、このコードを実行する完全な手順は以下のビデオで説明されています(音声はありません)。
テンプレートの変更、テンプレートに入力するための他の情報の抽出、またはこの機能に関するご質問のガイダンスが必要な場合は、アルティウムサポートページからお気軽にご質問/ご要望をお送りください。