exponenta event banner

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

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

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

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

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.

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

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);

См. также

| | | |

Связанные темы