.NET OpenXML SDK 2 RunProperties为空

5

我正在尝试阅读Word 2007 docx文档。

在Word中查看文档时,一切正常,但是当我尝试使用代码阅读它时,所有的Run对象的RunProperites都设置为null。

我最感兴趣的属性是RunProperies.FontSize,但不幸的是它也是null,我能够访问的唯一属性是InnerText。

我的代码如下:

using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true))
{
    MainDocumentPart mainPart = doc.MainDocumentPart;
    IList<Paragraph> paragraphList = doc.MainDocumentPart.Document.Body.Elements<Paragraph>().ToList<Paragraph>();

    foreach (Paragraph pr in paragraphList)
    {   
        IList<Run> runList = pr.Elements<Run>().ToList<Run>();
        foreach (Run r in runList)
        {
            // Some logic
        }
    }
}

我已经将文档最简化,它看起来像这样http://dl.dropbox.com/u/204110/test.docx
我有类似的文档可以正常阅读。OpenXML SDK 2中可能存在错误吗?
有人遇到过类似问题吗?任何帮助都将不胜感激。 谢谢!
1个回答

4

FontSize不是必需的元素,RunProperties也不是。对于每个运行,需要验证r.RunProperties不为null,然后验证r.RunProperties.FontSize不为null,再尝试读取值。可以参考以下示例:

uint fontSize = SOME_DEFAULT_FONT_SIZE;
RunProperties propertiesElement = r.RunProperties;
if (propertiesElement != null) {
  FontSize sizeElement = propertiesElement.FontSize;
    if (sizeElement != null) {
      fontSize = sizeElement.Val.Value;
    }
  }
}

如果您使用 SDK 附带的 DocReflector 工具查看提供的 docx 文件,您会发现前三个运行中指定了字体大小,但第四个运行未指定。


DocReflector很棒,给了我灵感,帮助我找到了解决方案...非常感谢! - Daniil Harik
@Daniil Harik,我遇到了同样的问题。我猜想可能是某个地方有一个默认样式的引用。你找到解决方法了吗? - MIKE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接