このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
動的テーブルの作成
動的テーブルとは、Report Generator プログラムの実行前にサイズが不明のテーブルです。そのため、サイズをハード コードすることはできません。この例では、動的テーブルを作成する 2 つの方法を示します。1 つ目のアプローチでは、基本の table オブジェクトからテーブルを作成します。別のアプローチでは、コンストラクターへの入力から直接テーブルを作成するテーブル コンストラクターを使用します。
table オブジェクトからの動的テーブルの作成
このプログラムでは、基本的な table オブジェクト (テーブル、テーブル エントリ、およびテーブル行の各オブジェクト) をループ処理および作成することでテーブルを作成する方法を示します。このコードはテスト結果のテーブルを表示します。1 列目はテスト名、2 列目はテスト時間、そして 3 列目は色分けされた結果です。
このコードでは、最初に struct のデータからテーブルのヘッダー行テキストとテーブルの列数を判断します。次に、形式的テーブル オブジェクトを作成して、テーブルの書式設定を指定します。その後、テキスト項目の見出し付け、テーブル エントリの作成、テーブル エントリの追加をループ処理することでテーブルの構築を開始し、テーブルの見出し行を作成します。データをループ処理し、テーブル行とテーブル エントリを作成します。各テーブル エントリをそのテーブル行に追加することでテーブルを構築してから、各テーブル行をテーブルに追加します。
import mlreportgen.report.* import mlreportgen.dom.* rpt = Report('testResults','pdf'); % Input data testData = struct('Name',{'Test 1','Test 2',... 'Test 3','Test 4'},'Time',{1.25,1.43,1.51,2.17},... 'Result',{'Pass','Fail','Pass','Fail'}); % Row heading names and number of columns fields = fieldnames(testData); nFields = numel(fields); % Table, row, and table entries formatting table = FormalTable(); table.RowSep = 'Solid'; table.ColSep = 'Solid'; table.Border = 'Solid'; table.TableEntriesInnerMargin = '5px'; table.Header.Style = {Bold()}; % Table heading row headRow = TableRow(); for k = 1:nFields append(headRow,TableEntry(fields{k})); end append(table.Header,headRow); % Table rows and table entries for data = testData row = TableRow(); for j = 1:nFields x = string(data.(fields{j})); p = Paragraph(x); if x == "Pass" p.Color = 'green'; elseif x == "Fail" p.Color = 'red'; end new_entry = TableEntry(p); append(row,new_entry); end append(table,row); end add(rpt,table); close(rpt); rptview(rpt);
テーブル コンストラクターを使用した動的テーブルの作成
このプログラムでは、テーブル コンストラクターへの入力を使用してテーブルを作成する方法を説明します。この方法でテーブルを作成するメリットは、テーブルを構築する際、データをループ処理してテーブル エントリと行オブジェクトを作成する必要がないことです。この例では、テーブル コンテンツを指定する入力データは cell 配列内にあります。このコードによって、table オブジェクトからの動的テーブルの作成に示されているのと同じテスト結果テーブルが表示されます。
このコードでは、最初に cell 配列に含まれる行数と列数を判断し、テーブル用のメモリを事前に割り当てます。次に、このコードではテーブル コンテンツの書式設定を行う 2 つのオプション手順を実行します。つまり、データの小数点部分を指定するためにデータ値を string に変換することと、結果列の色を設定するためにデータのループ処理を行うことです。最後に、形式的テーブルを入力 (テーブルの見出し行のテキスト、テーブル データの cell 配列) から直接作成し、テーブルを書式設定します。
import mlreportgen.report.* import mlreportgen.dom.* rpt = Report('testResults_cell','pdf'); testData_raw = {'Test 1',1.25,'Pass';'Test 2',1.43,... 'Fail';'Test 3',1.51,'Pass';'Test 4',2.17,'Fail'}; % Obtain cell array size [nrows,ncols] = size(testData_raw); % Preallocate memory for cell array testData{nrows,ncols} = []; % Convert all values to strings to control number of % decimal places displayed testData = testData_raw; idx = cellfun(@isnumeric, testData_raw(:)); testData(idx) = cellfun(@(x){sprintf('%.2f', x)}, testData_raw(idx)); % Set color of results column text items for i = 1:nrows for j = 1:ncols d = string(testData(i,j)); p = Paragraph(d); if d == "Pass" p.Color = 'green'; elseif d == "Fail" p.Color = 'red'; end testData(i,j) = {p}; end end % Create and format table table = FormalTable({'Name','Time','Result'},testData); table.RowSep = 'Solid'; table.ColSep = 'Solid'; table.Border = 'Solid'; table.TableEntriesInnerMargin = '5px'; table.Header.Style = {Bold()}; add(rpt,table); close(rpt); rptview(rpt);
参考
mlreportgen.report.Report
| mlreportgen.dom.FormalTable
| mlreportgen.dom.TableEntry
| struct
| cell