سؤال

أحاول قراءة Word 2007 DOCX وثيقة.

يبدو المستند جيدًا داخل Word ، ولكن عندما أحاول قراءة المعرف باستخدام الكود الخاص بي ، فإن جميع الكائنات التي يتم تشغيلها قد تم تعيين RunProperites Null.

الخاصية التي أهتم بها هي RunProperies.fontsize ، ولكن للأسف أنها فارغة أيضًا ، فإن الخاصية الوحيدة التي يمكنني الوصول إليها هي النص الداخلي.

رمزتي تبدو هكذا:

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؟

أي شخص لديه مشاكل مماثلة؟ أي مساعدة ستقدر. شكرا!

هل كانت مفيدة؟

المحلول

حجم الخط ليس عنصرًا مطلوبًا ، ولا يوجد RunProperties. لكل تشغيل ، تحقق من ذلك R.RunProperties ليس فارغًا ، ثم تحقق من ذلك R.RunProperties.FontSize ليس فارغًا قبل محاولة قراءة القيم. شيء على غرار:

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

إذا نظرت إلى ملف DOCX الذي قمت بتزويده باستخدام أداة docreflector التي تأتي مع SDK ، فيمكنك أن ترى أن أول 3 عمليات تشغيل لها حجم خط محدد ، لكن التشغيل الرابع لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top