Microsoft Excel ドキュメントからの要件のインポート
この例では、Microsoft® Excel® ドキュメントから要件をインポートする方法を示します。要件の特定のプロパティとカスタム属性に Excel スプレッドシートから列をマッピングできます。要件のインポート後に実行されるコールバックを使用して、インポートされた要件に要件タイプやインデックスなどの特定の値を割り当てることもできます。Microsoft Windows® プラットフォームでは、Microsoft Excel からの要件のみインポートできます。
この例では、ExampleRequirements Excel ファイルを使用します。ファイルを開くには次のように入力します。
winopen("ExampleRequirements.xlsx")PostImportFcn コールバック スクリプトの作成
スクリプトを作成して PostImportFcn コールバックとして登録することで、インポートされた要件をインポートが終了した直後に Requirements Toolbox™ で処理できます。この例では、slreqExamplePostImportXls スクリプトを PostImportFcn コールバックとして使用します。次のように入力してスクリプトを表示します。
edit("slreqExamplePostImportXls.m")Excel からインポートした要件のタイプは、既定では Functional になります。スクリプトの最初の for ループで、インポートされた各要件を反復処理して要件タイプを割り当てます。このループでは、Microsoft Excel ファイルでの元の要件タイプをチェックし、インポートされた要件のタイプをそのタイプに合う Requirements Toolbox の組み込みの要件タイプに設定します。Excel の要件に要件タイプがない場合、スクリプトはその要件のタイプを Functional のままにします。
idToRef = containers.Map('KeyType','char','ValueType','Any'); topRefs = slreq.getCurrentObject; reqSet = topRefs(1).parent; refs = reqSet.find('type','Reference'); for i = 1:numel(refs) ref = refs(i); switch ref.getAttribute('orig_Type') case 'Heading' ref.Type = 'Container'; case 'Note' ref.Type = 'Informational'; otherwise % leave AS IS end % build the Map of IDs for the next step idToRef(ref.Id) = ref; end
2 つ目の for ループで、インポートされた各要件を反復処理し、Excel で定義されている要件の階層を適用します。
sortedIds = sort(keys(idToRef)); for i = 2:numel(sortedIds) thisId = sortedIds{i}; % Find the parent ID by truncating this ID at the last '.' parentId = ''; dotCharIdx = find(thisId == '.'); if ~isempty(dotCharIdx) parentId = thisId(1:dotCharIdx(end)-1); end if ~isempty(parentId) ref = idToRef(thisId); parentObj = idToRef(parentId); setParent(ref,parentObj.SID); end end
Excel ファイルでは、要件の階層の異なるレベルを示すために、要件 ID でピリオド (.) が使用されています。スクリプトでは、インポートされた次のような要件セットについて、正しい要件の階層を維持します。
異なる階層レベルの識別に要件 ID でピリオドを使用している
各レベルの最初の 9 つの要件の先頭にゼロを使用している
各レベルの要件の数が 100 個未満である

インポート オプションの構成
インポート時に使用するオプションを含む構造体を作成します。要件が含まれている Excel ファイルの列と行の範囲をリストします。
importOptions = struct("columns",[2 7],"rows",[3 56]);
要件のデータを Excel の要件から Requirements Toolbox にマッピングするための情報を追加します。2 列目、4 列目、および 5 列目を slreq.Reference の組み込みのプロパティである ID、Summary、および Description にマッピングします。
importOptions.idColumn = 2; importOptions.summaryColumn = 4; importOptions.descriptionColumn = 5;
3 列目、6 列目、および 7 列目については、slreq.Reference のプロパティに直接マッピングできません。それらの列を orig_Type、Remark、および Status という名前のカスタム属性にマッピングします。Excel での要件タイプは、slreq.Reference オブジェクトの Type プロパティではなく、カスタム属性にマッピングされることに注意してください。
importOptions.attributes = {'orig_Type','Remark','Status'};
importOptions.attributeColumn = [3 6 7];slreqExamplePostImportXls スクリプトを PostImportFcn コールバックとして登録します。
importOptions.postImportFcn = "slreqExamplePostImportXls";要件のインポート
ExampleRequirements Excel ファイルの Requirements シートから ImportedFromExcel という名前の新しい要件セットに、slreq.import を使用して要件をインポートします。オプションの構造体から指定される追加のインポート オプションを使用して、プレーン テキストの参照要件として要件をインポートします。インポートされた参照要件の数、要件セットのファイル パス、および要件セットのハンドルを返します。
[count,reqSetFilePath,reqSet] = slreq.import("" + ... " ExampleRequirements.xlsx", ... ReqSet="ImportedFromExcel",AsReference=true, ... RichText=false,sheet="Requirements", ... options=importOptions);
インポートされた要件セットを保存し、[要件エディター] で内容を確認します。
save(reqSet); explore(reqSet);
slreqExamplePostImportXls スクリプトがインポート ノードに対する PostImportFcn コールバック関数として登録されています。このコールバックは、要件セットを更新する場合にも実行されます。

インポートされた要件のタイプの確認
インポートされた要件を調べて、要件タイプを Excel の要件と比較します。コールバック関数により、インポートされた要件に Requirements Toolbox の組み込みのタイプを使用してタイプが割り当てられています。たとえば、要件 1 は、Excel ファイルでのタイプは Heading で、Container のタイプでインポートされています。
req1 = slreq.find(Type="Reference",Index="1"); originalType1 = getAttribute(req1,"orig_Type")
originalType1 = 'Heading'
importedType1 = getAttribute(req1,"Type")importedType1 = 'Container'
要件 1.1 は、Excel でのタイプは Note で、Informational のタイプでインポートされています。
req2 = slreq.find(Type="Reference",Index="1.1"); originalType2 = getAttribute(req2,"orig_Type")
originalType2 = 'Note'
importedType2 = getAttribute(req2,"Type")importedType2 = 'Informational'
要件 2.1.1 は、Excel ではタイプが示されておらず、Functional のタイプでインポートされています。
req3 = slreq.find(Type="Reference",Index="2.1.1"); originalType3 = getAttribute(req3,"orig_Type")
originalType3 = 0×0 empty char array
importedType3 = getAttribute(req3,"Type")importedType3 = 'Functional'
インポートされた要件の階層の確認
インポートされた要件の階層を調べて、階層を Excel ファイルと比較します。コールバック関数により、インポートされた要件の階層は Excel ファイルでの階層に基づいて作成されています。たとえば、要件 2.1.1 には、Excel では 6 つの子要件があります。

インポートされた要件 2.1.1 の子要件を取得します。
childReqs = children(req3)
childReqs=1×6 Reference array with properties:
Id
CustomId
Artifact
ArtifactId
Domain
UpdatedOn
CreatedOn
CreatedBy
ModifiedBy
IsLocked
Summary
Description
Rationale
Keywords
Type
IndexEnabled
IndexNumber
SID
FileRevision
ModifiedOn
Dirty
Comments
Index
Excel では、2.1.1 の最初の子要件のタイトルは Cruise です。配列の最初の子要件に対する概要を取得します。
childSummary = childReqs(1).Summary
childSummary = 'Cruise'
[要件エディター] でも、インポートされた要件の階層が Excel での階層と一致することを確認できます。
