В этом примере показано, как вписать широкую таблицу в отчет.

Данные для этого примера представляют собой файл мата, содержащий массив ячеек данных камеры дорожного движения из Остина, штат Техас. Этот массив ячеек содержит такую информацию, как местоположение камеры, ее состояние и дата ее включения и т.д.
Предполагается traffic_data.mat что файл, содержащий массив ячеек данных камеры трафика, находится в текущей рабочей папке. Требование состоит в том, чтобы распечатать таблицу таким образом, чтобы все ее столбцы помещались на бумаге, которая имеет ширину 8,5 дюйма на 11 дюймов, в портретной ориентации.
Создание таблицы:
Чтобы включить таблицу в отчет, используйте объект mlreportgen.dom.Table. Этот объект имеет тело таблицы и необязательный верхний и нижний колонтитулы таблицы.
Сначала загрузите файл мата, содержащий данные массива ячеек 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 TaureSlicer для разделения входной таблицы на несколько фрагментов. Его свойство 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");
Теперь создайте объект среза таблицы и укажите формальную таблицу в качестве входных данных. Входная таблица содержит 18 столбцов, поэтому для создания двух фрагментов задайте свойству MaxCols значение 9.
Утилита среза таблицы имеет метод среза, который срезает входную таблицу и генерирует объекты mlreportgen.utils.TaureSlice. Эти объекты имеют разделенную таблицу и индексы начального и конечного столбцов исходной входной таблицы.
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);
Результат: Вывод удобочитаем и удовлетворяет первоначальному требованию распечатать таблицу на портретной странице. Стиль входной таблицы, имеющий полужирные заголовки и внутренние поля, которые сохраняются во всех фрагментах таблицы.
Плитка таблицы настраивается для читателей, чтобы понимать данные записей таблицы.
Copyright 2018 The MathWorks, Inc