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