Этот пример показывает аппроксимацию широкой таблицы в отчете.
Данные для этого примера являются файлом мата, содержащим массив ячеек данных камеры трафика из Остина, Техас. Этот массив ячеек содержит такую информацию, как местоположение камеры, ее состояние и дата ее включения и т.д.
Мы предполагаем 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