无法使用OpenXml为单词添加项目符号

OZn*_*new 3 docx openxml openxml-sdk

我的预期结果是:

  • 你好
  • 世界!

但当我使用以下代码时:

        MainDocumentPart mainDocumentPart =
          package.AddMainDocumentPart();

        DocumentFormat.OpenXml.Wordprocessing.Document elementW =
          new DocumentFormat.OpenXml.Wordprocessing.Document(
            new Body(
              new DocumentFormat.OpenXml.Wordprocessing.Paragraph(
                    new NumberingProperties(
                      new NumberingLevelReference() { Val = 0 },
                      new NumberingId() { Val = 1 })
                    ),
                new Run(
                  new RunProperties(),
                  new Text("Hello, ") { Space = new DocumentFormat.OpenXml.EnumValue<DocumentFormat.OpenXml.SpaceProcessingModeValues> { InnerText = "preserve" } })),
              new DocumentFormat.OpenXml.Wordprocessing.Paragraph(
                new ParagraphProperties(
                  new NumberingProperties(
                    new NumberingLevelReference() { Val = 0 },
                    new NumberingId() { Val = 1 })),
                new Run(
                  new RunProperties(),
                  new Text("world!")
                  {
                      Space = new DocumentFormat.OpenXml.EnumValue<DocumentFormat.OpenXml.SpaceProcessingModeValues> { InnerText = "preserve" }
                  })));

        elementW.Save(mainDocumentPart);
Run Code Online (Sandbox Code Playgroud)

结果是:

  1. 你好
  2. 世界!

我怎样才能得到预期的结果?

Eva*_*ner 7

我意识到这已经太晚了,但也许它可以帮助其他人提出同样的问题.明确的答案(由amurra)实际上并没有达到预期的结果.它只是创建一个文档,列表作为内容,比你更完整.您添加到主文档部分的内容很好.

在XML格式中,列表项被定义为具有缩进级别和编号ID的段落.此ID引用文档的NumberingDefinitionsPart中定义的编号规则.

在您的情况下,因为您已将编号ID设置为1,以下代码将映射该ID为1以根据需要反映项目符号列表.请注意Level对象中的NumberingFormat和LevelText对象.这些是格式化的关键组件.

NumberingDefinitionsPart numberingPart =
    mainDocumentPart.AddNewPart<NumberingDefinitionsPart>("myCustomNumbering");

Numbering numElement = new Numbering(
    new AbstractNum(
        new Level(
            new NumberingFormat() { Val = NumberFormatValues.Bullet },
            new LevelText() { Val = "·" }
        ) { LevelIndex = 0 }
    ) { AbstractNumberId = 0 },
    new NumberingInstance(
        new AbstractNumId(){ Val = 0 }
    ){ NumberID = 1 }
);

numElement.Save(numberingPart);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看MSDN上的Wordprocessing命名空间上的所有相关类的文档,或者使用"使用编号"标记文章.

  • +1 即使事后改进答案也能帮助其他人。这就是 SO 的意义所在。 (2认同)