public NumberingProperties CreateNewNumberingSequence(WordprocessingDocument document) { // The numbering part API does not work correctly. // Any Numbering instance that becomes associated with the part as its property does not produce numbering in the final document var definitions = document.MainDocumentPart.NumberingDefinitionsPart ?? document.MainDocumentPart.AddNewPart <NumberingDefinitionsPart>(); definitions.Numbering ??= new Numbering(); // The property must be accessed but cannot be used. It is null even on a new instance where this is the root part. // Using Numbering.Load produces the same result. var baseNumbering = new AbstractNum ( new Level { NumberingFormat = new NumberingFormat { Val = NumberFormatValues.Decimal }, LevelIndex = 0 } ) { AbstractNumberId = _numbering .Descendants <AbstractNum>() .Select <AbstractNum, int>(an => an.AbstractNumberId) .DefaultIfEmpty(0) .Max() + 1, MultiLevelType = new MultiLevelType { Val = MultiLevelValues.SingleLevel }, }; var numberingInstance = new NumberingInstance { NumberID = _numbering .Descendants <NumberingInstance>() .Select <NumberingInstance, int>(an => an.NumberID) .DefaultIfEmpty(0) .Max() + 1, AbstractNumId = new AbstractNumId { Val = baseNumbering.AbstractNumberId } }; _numbering.AppendChild(baseNumbering); _numbering.AppendChild(numberingInstance); _numbering.Save(definitions); // Assigning a new Numbering to the property has the same result as using one accessed from the property, even if it was saved first. return(new NumberingProperties { NumberingId = new NumberingId { Val = numberingInstance.NumberID }, NumberingLevelReference = new NumberingLevelReference { Val = 0 } }); }