Создание динамической таблицы

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

Создание динамической таблицы из объектов таблицы

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

The green text, Pass, indicates that the results in the first and third row pass, The red text, Fail, in the other two rows indicates that the results in these rows fail.

Код сначала определяет текст строки заголовка таблицы и количество столбцов таблицы из данных в 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);

См. также

| | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте