Составьте динамическую таблицу

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

Составьте динамическую таблицу от объектов таблицы

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

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

Смотрите также

| | | |

Похожие темы