主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

创建动态表

动态表是在报告生成器程序运行之前您不知道其大小的表,因此您无法对其大小进行硬编码。此示例展示了创建动态表的两种方法。一种方法是根据基本表对象创建表。另一种方法是使用表构造函数,该表构造函数直接从构造函数的输入创建表。

通过表对象创建动态表

此示例显示如何通过循环并创建基本表对象(表、表条目和表行对象)来创建表。代码显示了测试结果表,第一列是测试名称,第二列是测试时间,第三列是颜色编码的结果。

task_lib_dynamic.png

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);

使用表构造函数创建动态表

该程序显示如何使用表构造函数的输入来创建表。通过这种方式创建表的优点是您不必通过循环数据来创建表条目和行对象。在此示例中,指定表内容的输入数据位于元胞数组中。此代码显示与 通过表对象创建动态表 中所示的相同的测试结果表。

代码首先确定元胞数组中的行数和列数,并为表预分配内存。然后,代码执行两个可选步骤来格式化表内容 - 将数据值转换为字符串以指定数据的小数位数,并循环遍历数据以设置结果列的颜色。最后,它直接从输入创建一个正式的表:表标题行文本和表数据元胞数组,然后格式化表。

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);

% 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);

另请参阅

| | | |

主题