Подбор широких таблиц на странице

Этот пример показывает аппроксимацию широкой таблицы в отчете.

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

Мы предполагаем traffic_data.mat что файл, который содержит массив ячеек данных камеры трафика, находится в текущей рабочей директории. Требование состоит в том, чтобы напечатать таблицу так, чтобы все ее столбцы помещались на бумаге шириной 8,5 дюймов на 11 дюймов в длину, в портретной ориентации.

Составьте таблицу:

Чтобы включить таблицу в отчет, используйте объект mlreportgen.dom.FormalTable. Этот объект имеет тело таблицы и необязательные верхний и нижний колонтитулы таблицы.

Во-первых, загрузите файл mat, содержащий данные массива ячеек MATLAB, в рабочую область. Создайте объект Формальной Таблицы DOM с помощью данных массива ячеек. Чтобы упростить чтение таблицы, установите полужирным шрифтом заголовки таблицы и добавьте левое пространство полей между диафрагмой столбцов таблицы и содержимым таблицы.

load('traffic_data.mat');
tbl_header = traffic_camera_data(1,:);
traffic_camera_data(1,:) = [];

formalTable = mlreportgen.dom.FormalTable(tbl_header,traffic_camera_data);
formalTable.RowSep = "Solid";
formalTable.ColSep = "Solid";
formalTable.Border = "Solid";
formalTable.Header.TableEntriesStyle = [formalTable.Header.TableEntriesStyle,...
    {mlreportgen.dom.Bold(true)}];
formalTable.TableEntriesStyle = [formalTable.TableEntriesStyle,...
    {mlreportgen.dom.InnerMargin("2pt","2pt","2pt","2pt"),...
    mlreportgen.dom.WhiteSpace("preserve")}];

Пробный номер 1: Добавьте Формальную таблицу DOM на странице портрета по умолчанию размером 8,5 дюйма в ширину и 11 дюймов в длину.

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

import mlreportgen.dom.*
import mlreportgen.report.*;

Создайте контейнер для хранения содержимого отчета.

% To create a Word report, change the output type from "pdf" to "docx". 
rpt = Report("TrafficCameraDataPortrait","pdf");

Создайте главу с заголовком «Дорожные камеры в Остине».

chapter = Chapter("Title","Traffic Cameras in Austin");

Добавьте созданную таблицу к главе и добавьте главу к отчету.

add(chapter, formalTable);
add(rpt, chapter);
close(rpt);

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

Пробный номер 2: Поместите широкую таблицу на пейзажной ориентированной странице, которая имеет ширину 11 дюймов на 8,5 дюймов в длину.

import mlreportgen.dom.*
import mlreportgen.report.*;
import mlreportgen.utils.*

rpt = Report("TrafficCameraDataLandscape","pdf");
chapter = Chapter("Title","Traffic Cameras in Austin");

Установите значение размещения среды отчета равным true. Добавьте таблицу к главе.

rpt.Layout.Landscape = true;
add(chapter,formalTable);
add(rpt,chapter);
close(rpt);

Результат: Несмотря на то, что ландшафтное размещение лучше, чем отчет о портретной странице, многие столбцы не разборчивы, и таблица не легко читается.

Пробный номер 3: Используйте утилиту Report Generator TableSlicer, чтобы разбить входную таблицу на несколько срезы. Его свойство MaxCols задает максимальное количество столбцов на срез таблицы.

Во-первых, попробуйте разделить таблицу на два среза и напечатать их по умолчанию 8,5 шириной на 11-дюймовую длинную портретную бумагу.

import mlreportgen.dom.*
import mlreportgen.report.*;
import mlreportgen.utils.*

rpt = Report("TrafficCameraDataSlicing-1","pdf");
chapter = Chapter("Title","Traffic Cameras in Austin");

Теперь создайте объект slicer таблицы и укажите формальную таблицу как вход. Входная таблица имеет 18 столбцов, поэтому, чтобы создать два срезов, установите свойство MaxCols равным 9.

Утилита среза таблицы имеет метод среза, который срезает вход таблицу и генерирует объекты mlreportgen.utils.TableSlice. Эти объекты имеют срезанную таблицу и начало и конец индексы столбцов исходной таблицы входа.

slicer = mlreportgen.utils.TableSlicer("Table",formalTable,"MaxCols",9);
slices = slicer.slice();

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

for slice = slices
    str = sprintf("From column %d to column %d",slice.StartCol,slice.EndCol);
    para = Paragraph(str);
    para.Bold = true;
    para.Style = [para.Style,{KeepWithNext(true),...
        OuterMargin("0pt","0pt","5pt","0pt")}];
    add(chapter,para);
    add(chapter,slice.Table);
end

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

add(rpt,chapter);
close(rpt);

Результат: Выход лучше, чем первые два испытания, но срезы таблицы трудно считать и отсоединяются друг от друга.

Пробный номер 4: На основе выходов пробной версии до сих пор уменьшите значение MaxCols, чтобы создать 4 срезы таблицы. Используйте свойство RepeatCols, чтобы повторить столбцы во всех срезах. Чтобы соединить все 4 срезы, установите значение свойства RepeatCols равным 1, чтобы столбец Camera ID повторялся в каждом срезе таблицы.

import mlreportgen.dom.*
import mlreportgen.report.*;
import mlreportgen.utils.*

rpt = Report("TrafficCameraDataSlicing-2","pdf");
chapter = Chapter("Title","Traffic Cameras in Austin");

Установите значение MaxCols равным 6, а значение RepeatCols равным 1.

slicer = mlreportgen.utils.TableSlicer("Table",formalTable,"MaxCols",...
    6,"RepeatCols",1);
slices = slicer.slice();

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

for slice = slices
    str = sprintf("Repeated Column Index: %d ,SlicedColumns: From column %d to column %d",...
        slicer.RepeatCols,slice.StartCol, slice.EndCol);
    para = Paragraph(str);
    para.Bold = true;
    para.Style = [para.Style,{KeepWithNext(true),...
        OuterMargin("0pt","0pt","5pt","0pt")}];
    add(chapter,para);
    add(chapter,slice.Table);
end

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

add(rpt,chapter);
close(rpt);
rptview(rpt);

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

Плитка таблицы настроена для чтения, чтобы понять данные записей таблицы.

Копирайт 2018 The MathWorks, Inc