Списки в OpenXML немного сбивают с толку.
Существует NumberingDefinitionsPart , который описывает все списки в документе. Он содержит информацию о том, как должны отображаться списки (маркированные, нумерованные и т. Д.), А также присваивает и идентификаторы каждому из них.
Затем в MainDocumentPart для каждого элемента в списке, который вы хотите создать, вы добавляете новый абзац и назначаете этому списку идентификатор списка, который вы хотите.
Итак, для создания списка маркеров, например:
Сначала необходимо создать часть NumberingDefinitions:
NumberingDefinitionsPart numberingPart =
mainDocumentPart.AddNewPart<NumberingDefinitionsPart>("someUniqueIdHere");
Numbering element =
new Numbering(
new AbstractNum(
new Level(
new NumberingFormat() {Val = NumberFormatValues.Bullet},
new LevelText() {Val = "·"}
) {LevelIndex = 0}
){AbstractNumberId = 1},
new NumberingInstance(
new AbstractNumId(){Val = 1}
){NumberID = 1});
element.Save(numberingPart);
Затем вы создаете MainDocumentPart, как обычно, за исключением свойств абзаца, присваивает идентификатор нумерации:
MainDocumentPart mainDocumentPart =
package.AddMainDocumentPart();
Document element =
new Document(
new Body(
new Paragraph(
new ParagraphProperties(
new NumberingProperties(
new NumberingLevelReference(){ Val = 0 },
new NumberingId(){ Val = 1 })),
new Run(
new RunProperties(),
new Text("Hello, "){ Space = "preserve" })),
new Paragraph(
new ParagraphProperties(
new NumberingProperties(
new NumberingLevelReference(){ Val = 0 },
new NumberingId(){ Val = 1 })),
new Run(
new RunProperties(),
new Text("world!"){ Space = "preserve" }))));
element.Save(mainDocumentPart);
Более подробное описание параметров доступно в справочном руководстве OpenXML в разделе 2.9.