OpenXML 2 SDK - документ Word - Создает маркированный список программно

Используя OpenXML SDK, 2.0 CTP, я пытаюсь программно создать документ Word. В моем документе я должен вставить маркированный список, некоторые элементы списка должны быть подчеркнуты. Как я могу сделать это?

17
задан Charles Stewart 3 February 2010 в 15:10
поделиться

1 ответ

Списки в OpenXML немного запутаны.

Существует NumberingDefinitionsPart, который описывает все списки в документе. Она содержит информацию о том, как должны выглядеть списки (маркированные, пронумерованные и т.д.), а также присваивает каждому из них свой идентификатор.

Затем в MainDocumentPart, для каждого элемента списка, который вы хотите создать, вы добавляете новый пункт и присваиваете ему идентификатор списка, который вы хотите создать.

Таким образом, чтобы создать маркированный список, такой как:

  • Hello,
  • world!

Сначала нужно создать нумерационную часть:

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.

.
29
ответ дан 30 November 2019 в 10:27
поделиться