Microsoft Wordテンプレートに基づく仕様書エクスポート(11月更新)

この機能は古いもので、私たちは積極的にサポートしていません。

この手順は、プロジェクトデータをWord文書にエクスポートする際に、よりコントロールしやすくするために使用することができます。

下記の手順をご利用になる前に、内蔵のドキュメントエクスポート機能のご利用をご検討ください。アルティウムサポートページの内蔵Exporterをご利用ください。

Requirements & Systems Portal の Python & Rest API を利用して、すべてのデータに完全にアクセスし、Microsoft Word の Merge Fields 機能と組み合わせることで、ワンクリックで要件仕様書を Word ドキュメントにエクスポートできます。この機能により、文書に含める要件フィールドとその配置方法を選択することができます。

マージ フィールドとテンプレート

マージ フィールドは、その名前からデータ フィールドへの参照として使用されます。テンプレート ドキュメントにデータ ソースの値をメール マージすると、データ フィールドの情報がマージ フィールドに置き換わります。

異なるマージフィールドを持つテンプレート文書を作成することで、それらに基づいて同じ種類の出力文書(仕様書など)をすばやく生成することができます。

新しいマージフィールドを作成する

  1. 編集したいドキュメントを開いて Insertタブに移動します。

  2. メニューを開き Quick Partdメニューを開き Field.を選択します。 Fieldダイアログウィンドウが開きます。

  3. フィールド・ダイアログ・メニューで、左側のリストから Merge Fieldを選びます。右側のテキストボックスにマージ・フィールド名を入力し Field nameをクリックします。 OK.
    ヒント:追跡しやすいように、置換したいデータに基づいてフィールド名を付けます。

  4. マージフィールドが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" - 要件検証方法のステータス

これらのフィールドに URL を追加することもできます。たとえば、"Requirement Identifier" の URL に、要件とシステム ポータルの要件の場所を示す URL を追加することができます。

テンプレートの作成(テンプレート レプリケーション用)

マージ フィールドを組み合わせて、仕様ドキュメントの生成に使用するテンプレート ファイルを作成できます。

テンプレートの例を以下に示します。あるフィールドは「プレーンテキスト」に、他のフィールドは表の一部として記述されます。この例は、次のセクションで説明するPythonスクリプトの基本例です。

現在、汎用テンプレートと汎用スクリプトは、各要件ごとにテンプレートを複製して仕様ドキュメントに入力するように準備されていますが、テンプレートに1回だけ入力したり、テーブルの場合はテーブルごとに複数行(要件&システムポータルのテーブルや、より伝統的なExcelのテーブルに似ています)を入力する可能性があります。

マージ フィールドごとに異なるスタイルを定義すると、最終ドキュメントでそのスタイルを変更でき、変更はドキュメント全体に反映されます。たとえば、要件識別子のスタイルを定義すると、最終ドキュメントのすべての要件に適用されます。

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

テンプレートに入力する Python スクリプト

マージ フィールドを入力したテンプレートに基づいてドキュメントを生成するために使用される Python スクリプトは、次のメイン パッケージを使用します:

  • valispace - Requirements & Systems Portal の Python API を使用すると、Requirements & Systems Portal 内のオブジェクトにアクセスして更新することができます。

  • docx-mailmerge2 - この関数は、Office Open XML(Docx)ファイルに対してメール マージ(マージ フィールドを必要なデータで置き換える)を実行し、Microsoft Office Word をインストールしなくても、どのシステムでも使用できます。

  • python-docx - Microsoft Word (.docx) ファイルを作成および更新するための Python ライブラリ。

  • htmldocx - HTMLをDocxに変換するPythonライブラリ。Requirements & Systems PortalからWordへの書式を維持するために使用されます(太字、斜体、箇条書き...)。

コードは3種類の関数に分かれています:

  • Master functions - 関数で構成されています。 maincreate_specification_document関数で構成され、与えられたテンプレートに入力することで、要件を最終的なドキュメントにエクスポートするロジックを持ちます。

  • Requirement data extract functions- 要件 タ イ プ、 状態、 画像な ど、 要件デー タ を抽出す る すべての関数です。

  • Document "Format" functions- 空白の除去や、 最終的に生成 さ れ る ド キ ュ メ ン ト 上で表が破損 し ない よ う にす る な書式設定を実行す る 関数。

次のサブ章では、 こ れ ら の機能について簡単に説明 し ます。

マスター関数 - Main

この関数では、ユーザーがドメイン名、ユーザー名とパスワード、仕様を生成するプロジェクト識別子、テンプレートファイルへのパスを挿入することができます。

そして、この情報を使って

  1. Python API を使用して Requirements & Systems Portal にログインします;

  2. 仕様書、画像、要件タイプなどのプロジェクト汎用データをダウンロードする;

  3. 関数を呼び出します。 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を使用して、グループ(Requirements & Systems Portal のバックエンドでセクションが格納される方法)を持たないすべての仕様要件をフィルタリングし、アルファベット順に並べ替えます。

    #第 1 に、セクションを持たない要件をドキュメントに追加します。
    no_section_requirements = get_requirements_without_section(all_specification_requirements)

セクション以外の要件がすべて収集されたので、次はマージ フィールドに入力するデータを準備します。このデータは Requirement data extract functionsを使用して取得し、以下のコードに示すように python のリストに格納します。

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要件に画像があるかどうかを示すフラグが、データとして格納されます。

  • プレースホルダ req_textの場合、プレースホルダがデータとして格納されます。こ のプ レース ホルダは、 以下の コ ー ド に示す よ う に、 要件テ キ ス ト を HTML か ら Word へパース し た結果を格納す る リ ス ト のキー と し て も 使用 さ れます。

    docx_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を使用して、 空のセクションや空の見出しを削除し、 表を1ページに収め、 要件の書式付きテキストとその画像をドキュメントに挿入して、 ドキュメントを最終化します。

    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 - 要件の名前を返します。

  • get_requirement_state - 要件の名前を返します 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 - 最終文書を書式設定して、空の見出しをすべて削除します。

  • remove_all_but_last_section - 複数のセクションではなく、1つのセクションだけを持つように最終文書を書式設定します。

  • put_images - 画像プレースホルダーを各要件の画像に置き換えます。

  • clone_run_props - ランのプロパティを別のランにコピーする補助関数(HTMLフォーマットされたテキストのプロパティをコピーするために使用されます)

  • put_html_text - 要件テキスト プレースホルダを、太字、斜体、下線、取り消し線、箇条書きなど、対応する書式付きテキストに置き換えます。

最新の汎用テンプレート、Python スクリプト、または実行ファイルをダウンロードする

汎用仕様書作成 Nov2023.py 汎用仕様書テンプレート.docx 要求事項.txt

ユーザーは、Requirements & Systems Portal の "Scripting module" 内で Python スクリプトを実行できます。.pyファイルからコードをコピーし、スクリプトモジュール内の新しいpythonスクリプトに貼り付けます。

このスクリプトは、テキストで使用されている書式と一緒に、要求テキスト内の表もコピーすることができます。

スクリプトを実行する前に編集すること

スクリプトの作成からドキュメントの生成まで、このコードを実行する完全な手順は以下のビデオで説明されています(音声はありません)。



Line 27 - Line 30ユーザーは、スクリプトを実行するためのユーザー名とパスワードを定義する必要があります。ユーザは、シークレット管理を使用してスクリプトを実行することも、スクリプトに ユーザ名とパスワードを直接入力することもできます。ただし、パスワードは配置内のすべてのユーザに表示されます。そのため、[秘密の管理]を使用することをお勧めします。

Line 31 仕様の名前をコピーして、この行に入力します。

Line 32汎用仕様テンプレートをファイル管理にアップロードし、その「ID」をコピーしてこの行に追加します。

Line 33 仕様書があるプロジェクトの「ID」を追加する。

Line 34エクスポートしたドキュメントに名前を付けることができます。

テンプレートの変更、テンプレートに入力するための他の情報の抽出、またはこの機能に関するご質問のガイダンスが必要な場合は、アルティウムサポートページからお気軽にご質問/ご要望をお送りください。

AI-LocalizedAI-localized
If you find an issue, select the text/image and pressCtrl + Enterto send us your feedback.
機能の可用性

利用できる機能は、所有する Altium ソリューション (Altium DevelopAltium Agile のエディション (Agile Teams、または Agile Enterprise)、または Altium Designer (有効な期間)) によって異なります。

説明されている機能がお使いのソフトウェアに表示されない場合、Altium の営業担当者にお問い合わせください

Content