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

Код сначала определяет текст строки заголовка таблицы и количество столбцов таблицы из данных в структуре. Затем создается формальный объект таблицы и указывается форматирование таблицы. Затем программа начинает построение таблицы, циклически просматривая текстовые элементы заголовка, создавая записи таблицы и добавляя записи таблицы для создания строки заголовка таблицы. Затем код проходит через данные и создает строку таблицы и записи таблицы. Он строит таблицу, добавляя каждую запись таблицы в свою строку таблицы, а затем добавляет каждую строку таблицы в таблицу.
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