5

Word2007docxドキュメントを読み込もうとしています。

ドキュメントはWord内では問題なく表示されますが、コードを使用してidを読み取ろうとすると、すべての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にバグがある可能性はありますか?

誰かが同様の問題を抱えていましたか?どんな助けでもいただければ幸いです。ありがとう!

4

1 に答える 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 ファイルを見ると、最初の 3 回の実行ではフォント サイズが指定されていることがわかりますが、4 回目の実行では指定されていません。

于 2010-01-28T20:34:45.017 に答える