Пролет записи таблицы между строками и столбцами

В этих примерах показано, как сделать запись таблицы охватывающей строки и столбцы.

Неофициальная таблица

В этом примере показано, как использовать строку и столбец, охватывающие объект неформальной таблицы DOM, для создания следующей таблицы.

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

Импортируйте пакет DOM, чтобы не использовать длинные, полные имена классов.

import mlreportgen.dom.*

Настройте документ и добавьте заголовок для описания таблицы.

% To create a PDF report, change the output type from "docx" to "pdf". 
% To create an HTML report, change "docx" to "html" or "html-file" for
% a multifile or single-file report, respectively.
rpt = Document('myReport','docx');

h = Heading(1, 'Multiple Row and Column Table Entries Using an Informal Table');
h.Style = [h.Style {HAlign('center')}];
append(rpt, h);

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

tableStyle = {Width('100%'), Border('solid'), ColSep('solid'), RowSep('solid')};
mainHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), ...
    BackgroundColor('steelblue')};
mainHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')};
subHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), BackgroundColor('skyblue')};
subHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')};
bodyStyle = {OuterMargin('0pt', '0pt', '0pt', '0pt'), InnerMargin('2pt', '2pt', '2pt', '0pt')};

Создайте некоторые выборочные данные для включения в таблицу. Затем создайте объект таблица.

data = {'John', 'Smith', 'Natick, MA';
    'Jane', 'Doe', 'Boston, MA'};

t = Table(3);
t.Style = [t.Style tableStyle];

Создайте объект TableRow для первой строки таблицы, содержащей заголовки « Имена» и «Адрес». Заголовок Имени имеет два подзаголовка, поэтому он охватывает два столбца. Этот параметр задается свойством ColSpan записи таблицы. Заголовок Address не имеет никаких подзаголовков, поэтому он охватывает две строки. Этот параметр задается свойством RowSpan записи таблицы.

r = TableRow;
r.Style = [r.Style mainHeaderRowStyle];
p = Paragraph('Name');
p.Style = [p.Style mainHeaderTextStyle {HAlign('center')}];
te = TableEntry(p);
te.ColSpan = 2;
append(r, te);

p = Paragraph('Address');
p.Style = [p.Style mainHeaderTextStyle];
te = TableEntry(p);
te.RowSpan = 2;
append(r, te);
append(t, r);

Создайте вторую строку в таблице для заголовков «» Первый «» и «» Последний «» в поле «» Имя «». Несмотря на то, что ширина таблицы составляет три столбца, вторая строка содержит только две записи, поскольку поле Address охватывает обе первые и вторые строки.

r = TableRow;
r.Style = [r.Style subHeaderRowStyle];
p = Paragraph('First');
p.Style = [p.Style subHeaderTextStyle];
te = TableEntry(p);
append(r, te);

p = Paragraph('Last');
p.Style = [p.Style subHeaderTextStyle];
te = TableEntry(p);
append(r, te);
append(t, r);

Пройдите цикл по выборочным данным, чтобы добавить их в таблицу.

for k = 1:size(data, 1)
    r = TableRow;
    r.Style = [r.Style bodyStyle];
    te = TableEntry(data{k,1});
    append(r, te);
    te = TableEntry(data{k,2});
    append(r, te);
    te = TableEntry(data{k,3});
    append(r, te);
    append(t, r);
end

Добавьте таблицу к документу.

append(rpt, t);

Формальная таблица

В этом примере показано, как использовать строку и столбец, охватывающие объект формальной таблицы DOM, для создания следующей таблицы.

Формальная таблица является таблицей, которая состоит из трех подтаблиц для разделов заголовка, тела и нижнего колонтитула таблицы, соответственно. Использование формальной таблицы вместо неформальной таблицы отделяет заголовок, который требует специального форматирования, от данных, которые могут быть переданы непосредственно в конструктор формальной таблицы для заполнения таблицы тел.

Импортируйте пакет DOM, чтобы не использовать длинные, полные имена классов.

import mlreportgen.dom.*

Перейдите на новую страницу в существующем документе и добавьте заголовок для описания таблицы.

br = PageBreak();
append(rpt, br);
h = Heading(1, 'Multiple Row and Column Table Entries Using a Formal Table');
h.Style = [h.Style {HAlign('center')}];
append(rpt, h);

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

tableStyle = {Width('100%'), Border('solid'), ColSep('solid'), RowSep('solid')};
mainHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), ...
    BackgroundColor('steelblue')};
mainHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')};
subHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), BackgroundColor('skyblue')};
subHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')};
bodyStyle = {OuterMargin('0pt', '0pt', '0pt', '0pt')};

Создайте некоторые выборочные данные для включения в таблицу. Затем создайте объект FormalTable с выборочными данными в разделе Body.

data = {'John', 'Smith', 'Natick, MA';
    'Jane', 'Doe', 'Boston, MA'};

t = FormalTable(data);
t.Style = [t.Style tableStyle];
t.Body.TableEntriesStyle = [t.Body.TableEntriesStyle, bodyStyle];

Составьте таблицу Header объекта FormalTable с помощью того же метода, что и в предыдущем примере. Создайте объект TableRow для первой строки таблицы, содержащей заголовки « Имена» и «Адрес». Заголовок Имени имеет два подзаголовка, поэтому он охватывает два столбца. Этот параметр задается свойством ColSpan записи таблицы. Заголовок Address не имеет никаких подзаголовков, поэтому он охватывает две строки. Этот параметр задается свойством RowSpan записи таблицы.

r = TableRow;
r.Style = [r.Style mainHeaderRowStyle];
p = Paragraph('Name');
p.Style = [p.Style mainHeaderTextStyle {HAlign('center')}];
te = TableEntry(p);
te.Style = [te.Style mainHeaderTextStyle];
te.ColSpan = 2;
append(r, te);

p = Paragraph('Address');
p.Style = [p.Style mainHeaderTextStyle];
te = TableEntry(p);
te.Style = [te.Style mainHeaderTextStyle];
te.RowSpan = 2;
append(r, te);
append(t.Header, r);

Создайте вторую строку в таблице для заголовков «» Первый «» и «» Последний «» в поле «» Имя «». Несмотря на то, что ширина таблицы составляет три столбца, вторая строка содержит только две записи, поскольку поле Address охватывает обе первые и вторые строки.

r = TableRow;
r.Style = [r.Style subHeaderRowStyle];
p = Paragraph('First');
p.Style = [p.Style subHeaderTextStyle];
te = TableEntry(p);
append(r, te);

p = Paragraph('Last');
p.Style = [p.Style subHeaderTextStyle];
te = TableEntry(p);
append(r, te);
append(t.Header, r);

Добавьте таблицу к документу.

append(rpt, t);

Таблица макета страницы

В этом примере показано, как использовать покрывающие строки и столбцы для создания невидимой таблицы макета страницы для сложного размещения.

Импортируйте пакет DOM, чтобы не использовать длинные, полные имена классов.

import mlreportgen.dom.*

Перейдите на новую страницу в существующем документе и добавьте заголовок для описания таблицы.

br = PageBreak();
append(rpt, br);
h = Heading(1, 'Multi-column Invisible Table');
h.Style = [h.Style {HAlign('center')}];
append(rpt, h);

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

mainTableStyle = {Width('100%'), Border('none') ColSep('none'), RowSep('none')};
dataTableStyle = {Border('solid'), ColSep('dotted'), RowSep('solid'),...
    OuterMargin('0pt', '0pt', '0pt', '0pt')};
dataTableEntriesStyle = {OuterMargin('0pt', '0pt', '0pt', '0pt'), VAlign('middle')};
histStyle = {InnerMargin('2pt', '2pt', '2pt', '2pt'), ...
    HAlign('center'), VAlign('bottom'), Width('5in'), Height('4in')};

Создайте примеры данных, представляющих 500 случайных щелчки монеты. Затем создайте объекты Text, FormalTable и изображение, чтобы отобразить информацию о данных.

coinflips = randi(2, [500, 10]);
numHeads = sum(coinflips-1,2);

p = Text(['The plot below shows the results from 500 trials in which a coin was flipped 10 times, ',...
    'and the number of times the coin landed on heads was counted. ',...
    'The table displays the results for the first 20 trials.']);

dataHeader = {'Trial', 'Heads'};
dataBody = [(1:20)', numHeads(1:20)];
dataTable = FormalTable(dataHeader, dataBody);
dataTable.TableEntriesStyle = [dataTable.TableEntriesStyle dataTableEntriesStyle]; 
dataTable.Header.Style = [dataTable.Header.Style {Bold}];
dataTable.Style = [dataTable.Style dataTableStyle];

histogram(numHeads);
title('Results')
xlabel('Number of Heads')
ylabel('Number of Trials')
saveas(gcf,'histogram_img.png');
close(gcf)
h = Image('histogram_img.png');

Создайте невидимую таблицу и начните добавление компонентов. Добавьте таблицу данных в первую строку и задайте, что она охватывает две строки.

t = Table(2);
t.Style = [t.Style mainTableStyle];

row1 = TableRow;
row1.Style = [row1.Style {Width('100%')}];
entry1 = TableEntry;
append(entry1, dataTable);
entry1.RowSpan = 2;
entry1.Style = [entry1.Style {Width("40%")}];
append(row1, entry1);

Также добавьте объект Text в первую строку, а затем добавьте строку в таблицу.

entry2 = TableEntry(p);
entry2.Style = [entry2.Style {Width("60%")}];
append(row1, entry2);

append(t, row1);

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

row2 = TableRow;
entry3 = TableEntry;
h.Style = [h.Style histStyle];
append(entry3, h);
append(row2, entry3);
entry3.Style = [entry3.Style {Width('60%')}];

append(t,row2);

Сгенерируйте и отобразите отчет.

append(rpt,t);
close(rpt);
rptview(rpt);