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