Динамическая таблица - это таблица, размер которой вы не знаете до запусков программы генератора отчетов, поэтому вы не можете жестко кодировать ее размер. В этом примере показаны два подхода к созданию динамической таблицы. Один из подходов создает таблицу из основных объектов таблицы. Другой подход использует конструктор таблицы, который создает таблицу непосредственно от входа в конструктор.
Эта программа показывает, как создать таблицу путем закольцовывания и создания основных объектов таблицы: таблицы, записи таблицы и объектов строк таблицы. Код отображает таблицу результатов тестирования, причем первый столбец является именем теста, второй - временем тестирования, а третий - цветокодированным результатом.

Код сначала определяет текст строки заголовка таблицы и количество столбцов таблицы из данных в 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);
Эта программа показывает, как создать таблицу, используя вход в конструктор таблицы. Преимущество создания таблицы таким образом заключается в том, что вы не должны создавать таблицу путем циклов через данные, чтобы создать объекты записи и строки таблицы. В этом примере входные данные, которые задают содержимое таблицы, находятся в массиве ячеек. Этот код отображает ту же таблицу результатов тестирования, что и в разделе «Создание динамической таблицы из объектов таблицы».
Код сначала определяет количество строк и столбцов в массиве ячеек и предварительно выделяет память для таблицы. Затем код выполняет два необязательных шага, которые форматируют содержимое таблицы - преобразование значений данных в строки, чтобы задать количество десятичных знаков для данных и закольцовывание через данные, чтобы задать цвет результирующего столбца. Наконец, она создает формальную таблицу непосредственно из входов: текста строки заголовка таблицы и массива ячеек данных таблицы, а затем форматирует таблицу.
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);
cell | mlreportgen.dom.FormalTable | mlreportgen.dom.TableEntry | mlreportgen.report.Report | struct