Можно использовать DOM API для создания и форматирования неупорядоченных, упорядоченных и многоуровневых списков в программе генерации отчетов.
Списки представлены как mlreportgen.dom.UnorderedList
или mlreportgen.dom.OrderedList
объекты. Элементы списка представлены как mlreportgen.dom.ListItem
объекты.
Вы можете создать список из MATLAB® массив, который задает элементы списка или создает список по одному элементу за раз. Создание списка из массива является самым простым подходом. Создание списка по одному элементу за раз полезно, когда элементы содержат несколько элементов, таких как абзац и таблица.
Формат списков и списков элементов осуществляется с помощью стилей, заданных шаблоном, или программно с помощью объектов формата.
Можно создать список из одномерного числового массива, строковых массивов, массива векторов символов, массива ячеек или категориального массива. Задайте элементы списка в массиве ячеек, когда элементы имеют различные типы.
Чтобы создать неупорядоченный список из массива, добавьте массив непосредственно к элементу документа или документа. append
метод:
Создание mlreportgen.dom.UnorderedList
объект.
Создание mlreportgen.dom.ListItem
объект для каждого элемента массива.
Добавляет ListItem
объекты к UnorderedList
объект и UnorderedList
объект документа или детали документа.
Для примера этот код создает неупорядоченный список из строковых массивов:
import mlreportgen.dom.* d = Document("fruit","html"); ul = append(d,["apples","oranges","bananas"]); close(d); rptview(d);
Вот список в сгенерированном отчете:
Примечание
Чтобы создать список путем добавления массива к документу или детали документа, массив должен быть 1-байт- n. Добавление массива n -by-1 к документу или детали документа создает таблицу, а не список.
Кроме того, создайте неупорядоченный список путем предоставления массива в качестве входов mlreportegen.dom.UnorderedList
конструктор. Для примера:
import mlreportgen.dom.* d = Document("fruit","html"); ul = UnorderedList(["apples","oranges","bananas"]); ul = append(d,ul); close(d); rptview(d);
Конструктор создает mlreportgen.dom.ListItem
объект для каждого элемента массива и добавляет ListItem
объекты к UnorderedList
объект.
Чтобы создать упорядоченный список из массива, укажите массив как вход в mlreportegen.dom.OrderedList
конструктор. Конструктор создает mlreportgen.dom.ListItem
объект для каждого элемента массива и добавляет ListItem
объекты к OrderedList
объект. Для примера этот код создает упорядоченный список из строковых массивов.
import mlreportgen.dom.* d = Document("weekdays","html"); ol = OrderedList(["Monday","Tuesday","Wednesday","Thursday","Friday"]); append(d,ol); close(d); rptview(d);
Вот список в сгенерированном отчете:
Задайте элементы списка в массиве ячеек, когда элементы имеют различные типы. В массив ячеек можно включать векторы символов, строки, числа и некоторые объекты DOM, такие как mlreportgen.dom.Text
объект. Список объектов DOM, которые можно включить, см. mlreportgen.dom.ListItem
.
Например, этот код создает упорядоченный список из массива ячеек, который содержит векторы символов и mlreportgen.dom.ExternalLink
объект.
import mlreportgen.dom.* d = Document('myreport','html'); ol = UnorderedList({... 'apples',... 'oranges',... ExternalLink('https://en.wikipedia.org/wiki/Mango',... 'mango')}); append(d,ol); close(d); rptview(d);
Вот список в сгенерированном отчете:
Вместо того, чтобы указывать весь список как массив, можно задать каждый элемент списка как mlreportgen.dom.ListItem
объект и добавить ListItem
объекты для mlreportgen.UnorderedList
или mlreportgen.OrderedList
объект. Этот подход полезен, когда позиции списка содержат несколько абзацев, сочетание абзацев и таблиц или другие комбинации элементов документа.
Например, этот код создает список, в котором элементы списка состоят из абзаца и таблицы.
import mlreportgen.dom.* d = Document('magicsquares','html'); ol = UnorderedList(); item1 = ListItem(Paragraph('magic(2)')); append(item1,Table(magic(2))); append(ol,item1); item2 = ListItem(Paragraph('magic(3)')); append(item2,Table(magic(3))); append(ol,item2); append(d,ol); close(d); rptview(d);
Вот список в сгенерированном отчете:
Многоуровневый список - это список, содержащий вложенные списки. Можно вложить любую комбинацию упорядоченных и неупорядоченных списков до девяти уровней вложения.
Для создания многоуровневых списков можно использовать следующие подходы. Сгенерированный список выглядит одинаково с каждым подходом, но представления DOM API различаются.
Создайте многоуровневый список из массивов ячеек, которые моделируют иерархию списков. С помощью этого подхода DOM API представляет подсписок как дочерний элемент списка, который его содержит.
Создайте многоуровневый список по одному списку за раз с помощью mlreportgen.dom.UnorderedList
, mlreportgen.dom.OrderedList
, и mlreportgen.dom.ListItem
объекты. Добавьте подсписок к списку или элементу списка. Если вы добавляете подсписок к списку, DOM API представляет подсписок как дочерний элемент списка. Если вы добавляете подсписок к элементу списка, DOM API представляет подсписок как дочерний для элемента списка.
Чтобы создать многоуровневый список из массивов ячеек, используйте один из следующих подходов:
Если подсписок является неупорядоченным списком, можно представить его как массив ячеек n 1 байт, который является элементом массива ячеек 1 байт n, который представляет список, который на один уровень выше. Для примера этот код представляет подсписок как массив ячеек, который является третьим элементом массива ячеек, который представляет список верхнего уровня.
import mlreportgen.dom.*; d = Document('nestedListReport','html'); topList = OrderedList({... 'Start MATLAB',... 'Create a rank 3 or 4 magic square',... {'magic(3)',... % sublist is third element 'magic(4)'},... 'Close MATLAB'}); append(d,topList); close(d); rptview(d);
Вот список в сгенерированном отчете:
Если подсписок является упорядоченным списком, создайте mlreportgen.dom.OrderedList
объект из массива ячеек 1 n байта, который представляет подсписок. Включите OrderedList
объект как элемент массива ячеек, который представляет список на один уровень вверх. Например, этот код создает OrderedList
объект из массива ячеек, который представляет подсписок и включает объект в качестве третьего элемента массива ячеек, который используется для создания списка верхнего уровня.
import mlreportgen.dom.*; d = Document('orderedListReport','html'); topList = OrderedList({'Start MATLAB', ... 'Create a rank 3 or 4 magic square',... OrderedList({... % sublist is third element 'magic(3)',... 'magic(4)'}),... 'Close MATLAB'}); append(d,topList); close(d); rptview(d);
Вот список в сгенерированном отчете:
В двух предыдущих примерах DOM API представляет подсписок как третий дочерний элемент списка верхнего уровня. Для доступа к подсписку используйте Children
свойство списка верхнего уровня.
topList.Children(3)
Когда элементы подсписка содержат несколько абзацев, сочетание абзацев и таблиц или другие комбинации элементов документа, создайте mlreportgen.dom.ListItem
объекты и добавить их в mlreportgen.dom.UnorderedList
или mlreportgen.dom.OrderedList
объект. Затем добавьте подсписок к списку или элементу списка.
Этот пример добавляет подсписок к списку верхнего уровня в качестве третьего элемента списка. Элементы подсписка состоят из текста и таблицы.
import mlreportgen.dom.*; d = Document('orderedListReport','html'); subList = UnorderedList; subListItem1 = ListItem('>> magic(3)'); table = append(subListItem1,Table(magic(3))); table.Width = '1in'; append(subList,subListItem1); subListItem2 = ListItem('>> magic(4)'); table = append(subListItem2,Table(magic(4))); table.Width = '1in'; append(subList,subListItem2); topList = OrderedList(); append(topList,ListItem('Start MATLAB')); append(topList,ListItem('Create a rank 3 or 4 magic square')); append(topList,subList); % sublist is item 3 of topList append(topList,ListItem('Close MATLAB')); append(d,topList); close(d); rptview(d);
Вот список в сгенерированном отчете:
DOM API представляет подсписок как третий дочерний элемент списка верхнего уровня. Для доступа к подсписку используйте Children
свойство списка верхнего уровня.
topList.Children(3)
Вместо добавления подсписка к списку можно добавить подсписк к элементу списка. В следующем примере подсписок добавляется ко второму элементу списка верхнего уровня. Сгенерированный список выглядит так же, как и в предыдущем примере.
import mlreportgen.dom.*; d = Document('orderedListReport','html'); topList = OrderedList({ ... 'Start MATLAB', ... 'Create a rank 3 or 4 magic square:', ... 'Close MATLAB'}); subList = UnorderedList; subListItem1 = ListItem('>> magic(3)'); table = append(subListItem1,Table(magic(3))); table.Width = '1in'; append(subList,subListItem1); subListItem2 = ListItem('>> magic(4)'); table = append(subListItem2,Table(magic(4))); table.Width = '1in'; append(subList,subListItem2); % Append the sublist to the second list item topListItem2 = topList.Children(2); append(topListItem2, subList); append(d, topList); close(d); rptview(d);
DOM API представляет подсписок как второй дочерний элемент второго элемента списка верхнего уровня. Для доступа к подсписку используйте этот код:
topList.Children(2).Children(2)
Можно использовать стили списка, определенные в шаблоне, чтобы задать отступы для каждого уровня списка и тип маркера или формат номера, используемый для визуализации элементов списка.
Чтобы использовать заданный шаблоном стиль списка для форматирования списка, установите StyleName
свойство списка имени стиля. Например, этот код указывает, что имя стиля списка MyListStyle
.
import mlreportgen.dom.*; d = Document('myListReport','html'); list = append(d,{'first item',... OrderedList({'step 1','step 2'}),'second item'}); list.StyleName = 'MyListStyle'; close(d); rptview(d);
Для Microsoft® Word-документы, заданный стиль списка должны быть определены в шаблоне, назначенном документу.
Примечание
Стиль списка определяет способ визуализации элементов списка независимо от типа списка. Если стиль списка не задан, в DOM API используется стиль списка по умолчанию, который отображает список в соответствии с типом. Например, стиль списка по умолчанию для неупорядоченных списков использует маркеры для визуализации элементов списка. Если задан стиль списка для mlreportegen.dom.UnorderedList
объект, который нумерует элементы, элементы нумеруются, даже если тип объекта не упорядочен.
Дополнительные сведения о создании шаблона Word см. в разделе Создание шаблона Microsoft Word.
Для определения стиля списка в шаблоне Word:
Откройте файл шаблона Word одним из следующих методов:
В MATLAB, в Current Folder pane, щелкните правой кнопкой мыши файл шаблона и нажмите Open Outside MATLAB.
За пределами MATLAB щелкните правой кнопкой мыши файл и выберите Open.
Примечание
Не кликните файл шаблона Word дважды, чтобы открыть его. Двойной щелчок по файлу открывает файл документа Word, в котором используется шаблон.
В Word, на вкладке Home, в группе Paragraph, щелкните значок Multilevel List и затем нажмите Define New List Style.
Установите Name имя стиля.
Задайте форматирование, например стиль маркера и цвет для каждого уровня списка.
Выберите New documents based on this template.
Щелкните OK, чтобы сохранить шаблон.
Пример, определяющий стиль списка Word, см. в разделе Пользовательский стилизованный список слов.
Для определения стиля списка в каскадной таблице стилей (CSS) для шаблона HTML или PDF используйте ul
элемент для неупорядоченных стилей списка и ol
элемент для упорядоченных стилей списка. Можно использовать дочерний селектор (>
) для определения многоуровневых стилей списка. См. раздел «Изменение стилей в шаблонах HTML и изменение стилей в шаблонах PDF».
Например, этот код CSS определяет внешний вид двухуровневого неупорядоченного списка, который может содержать упорядоченные или неупорядоченные подсписки.
ul.MyUnorderedList { list-style-type:disc; } ul.MyUnorderedList > ul { list-style-type:circle; } ul.MyUnorderedList > ol { list-style-type:decimal; }
Для получения информации об редактировании CSS см. документацию, такую как W3Schools.com руководство CSS.
Форматирование списков программно путем добавления объектов формата, таких как mlreportgen.dom.Color
объект, к Style
свойство mlreportgen.dom.UnorderedList
, mlreportgen.dom.OrderedList
, или mlreportgen.dom.ListItem
объект. Форматирование, заданное в Style
свойство переопределяет заданный шаблоном стиль.
Для списков в отчетах PDF и HTML можно задать тип маркера или тип нумерации при помощи mlreportgen.dom.ListStyleType
форматировать объект.
Например, этот код создает зеленый упорядоченный список с строчными буквенными пулями. Третий элемент списка - синий и курсив.
import mlreportgen.dom.* d = Document('myreport','html'); ol = OrderedList(["one", "two", "three"]); ol.Style = {Color('Green'),ListStyleType('lower-alpha')}; ol.Children(3).Style = {Color('blue'),Italic(true)}; append(d,ol); close(d); rptview(d);
Вот список в сгенерированном отчете:
Можно также форматировать объекты DOM, которые используются для создания элементов списка, используя свойства формата или объекты формата, связанные с объектом. Для примера этот код форматов mlreportgen.dom.Text
объекты до их использования для создания списка.
import mlreportgen.dom.* d = Document('myreport','html'); li1 = Text('red'); li1.Color = 'Red'; li2 = Text('blue'); li2.Color = 'Blue'; append(d,{li1, li2}); close(d); rptview(d);
Вот список в сгенерированном отчете:
В зависимости от способа создания многоуровневого списка, подсписок может быть дочерним элементом родительского списка или дочерним элементом предыдущего списка в родительском списке. См. раздел «Создание многоуровневого списка».
Если подсписок является дочерним элементом элемента списка родительского списка, подсписок наследует форматирование от элемента списка. Для примера этот код делает подсписок дочерним элементом второго элемента списка в родительском списке.
import mlreportgen.dom.*; d = Document('nestedListReport','html'); parentlist = OrderedList(); li1 = ListItem('List Item 1'); li2 = ListItem('List Item 2'); li2.Style = [li2.Style {Color('red')}]; sublist = UnorderedList({'Sublist Item 1' 'Sublist Item 2'}); append(li2,sublist); append(parentlist,li1); append(parentlist,li2); append(d,parentlist); close(d); rptview(d);
Подсписок наследует красный цвет от элемента списка, который содержит его.
Если вы не хотите, чтобы подсписок наследовал форматирование от предыдущего элемента списка, форматируйте абзац или текст в предыдущем элементе списка вместо форматирования элемента списка. Для примера:
import mlreportgen.dom.*; d = Document('nestedListReport','html'); parentlist = OrderedList(); li1 = ListItem('List Item 1'); txt = Text('List Item 2'); txt.Color = 'red'; li2 = ListItem(txt); sublist = UnorderedList({'Sublist Item 1' 'Sublist Item 2'}); append(parentlist,li1); append(parentlist,li2); append(parentlist,sublist); append(d,parentlist); close(d); rptview(d);
import mlreportgen.dom.*; d = Document('nestedListReport','html'); parentlist = OrderedList(); li1 = ListItem('List Item 1'); li2 = ListItem('List Item 2'); li2.Style = [li2.Style {Color('red')}]; sublist = UnorderedList({'Sublist Item 1' 'Sublist Item 2'}); append(parentlist,li1); append(parentlist,li2); append(parentlist,sublist); append(d,parentlist); close(d); rptview(d);
Второй элемент списка родительского списка - красный, но подсписок - черный.
mlreportgen.dom.ListItem
| mlreportgen.dom.ListStyleType
| mlreportgen.dom.OrderedList
| mlreportgen.dom.UnorderedList