Создание и форматирование списков

Можно использовать DOM API для создания и форматирования неупорядоченных, упорядоченных и многоуровневых списков в программе генерации отчетов.

Списки представлены как mlreportgen.dom.UnorderedList или mlreportgen.dom.OrderedList объекты. Элементы списка представлены как mlreportgen.dom.ListItem объекты.

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

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

Составьте список из массива 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);

Вот список в сгенерированном отчете:

Bulleted list that includes the items apples, oranges, and bananas

Примечание

Чтобы создать список путем добавления массива к документу или детали документа, массив должен быть 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);

Вот список в сгенерированном отчете:

List of weekdays in order, Monday through Friday

Составьте список из массива ячеек

Задайте элементы списка в массиве ячеек, когда элементы имеют различные типы. В массив ячеек можно включать векторы символов, строки, числа и некоторые объекты 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);

Вот список в сгенерированном отчете:

Bulleted list with the items apples, oranges, and mango. Mango is a hyperlink.

Создание списка по одному элементу за раз

Вместо того, чтобы указывать весь список как массив, можно задать каждый элемент списка как 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);

Вот список в сгенерированном отчете:

A bulleted list with two items. Each list item is a call to the magic function, followed by the output.

Создание многоуровневого списка

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

Для создания многоуровневых списков можно использовать следующие подходы. Сгенерированный список выглядит одинаково с каждым подходом, но представления 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);

    Вот список в сгенерированном отчете:

    A nested list with three items. A bulleted sublist is nested under the second item of the top-level list.

  • Если подсписок является упорядоченным списком, создайте 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);

    Вот список в сгенерированном отчете:

    A numbered list with three items. A numbered sublist is nested under the second item of the top-level list.

В двух предыдущих примерах 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);

Вот список в сгенерированном отчете:

A numbered list with three items. The sublist items contain text for the magic function call and a table for the output.

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:

  1. Откройте файл шаблона Word одним из следующих методов:

    • В MATLAB, в Current Folder pane, щелкните правой кнопкой мыши файл шаблона и нажмите Open Outside MATLAB.

    • За пределами MATLAB щелкните правой кнопкой мыши файл и выберите Open.

      Примечание

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

  2. В Word, на вкладке Home, в группе Paragraph, щелкните значок Multilevel List и затем нажмите Define New List Style.

  3. Установите Name имя стиля.

  4. Задайте форматирование, например стиль маркера и цвет для каждого уровня списка.

  5. Выберите New documents based on this template.

  6. Щелкните OK, чтобы сохранить шаблон.

Пример, определяющий стиль списка Word, см. в разделе Пользовательский стилизованный список слов.

Создание стиля списка HTML или PDF

Для определения стиля списка в каскадной таблице стилей (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);

Вот список в сгенерированном отчете:

A list with lowercase letters for bullets showing different colors and styles for list items

Можно также форматировать объекты 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);

Вот список в сгенерированном отчете:

Bulleted list where item one is red and item two is blue.

Формат элемента списка в многоуровневом списке

В зависимости от способа создания многоуровневого списка, подсписок может быть дочерним элементом родительского списка или дочерним элементом предыдущего списка в родительском списке. См. раздел «Создание многоуровневого списка».

Если подсписок является дочерним элементом элемента списка родительского списка, подсписок наследует форматирование от элемента списка. Для примера этот код делает подсписок дочерним элементом второго элемента списка в родительском списке.

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);

Подсписок наследует красный цвет от элемента списка, который содержит его.

Ordered list where first item is black and the second item and the sublist that it contains are red

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

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);

Второй элемент списка родительского списка - красный, но подсписок - черный.

Ordered list where the first list item is black, the second list item is red, and the sublist is black

См. также

| | |

Похожие темы