سؤال

أرغب في تحميل ملف Word 2007 أو مزيد من ملف Docx على خادم الويب الخاص بي وتحويل جدول المحتويات إلى بنية XML بسيطة. إن القيام بذلك على سطح المكتب مع VBA التقليدي يبدو أنه كان من السهل. تبحث في بيانات WordProcessingML XML المستخدمة لإنشاء ملف Docx مربك. هل هناك طريقة (بدون كوم) للتنقل في المستند في المزيد من الأزياء الموجهة للكائن؟

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

المحلول

أنا أوصي بشدة النظر في افتح XML SDK 2.0. وبعد إنها CTP، لكنني وجدت أنها مفيدة للغاية في معالجة ملفات XMLX دون الحاجة إلى التعامل مع كوم على الإطلاق. الوثائق ملطخة بعض الشيء، ولكن الشيء الرئيسي للبحث عن هو documentformat.openxml.packaging.wordprocessingdocument. يمكنك أن تختار مستند .docx إذا قمت بإعادة تسمية الملحق إلى .zip وحفرها في ملفات XML هناك. من القيام بذلك، يبدو أن جدول محتويات موجود في علامة "وثيقة منظمة" وأن الأشياء مثل العناوين في ارتباط تشعبي من هناك. putzing حولها قليلا، وجدت أن شيئا مثل هذا يجب أن يعمل (أو على الأقل أعطيك نقطة انطلاق).

WordprocessingDocument wordDoc = WordprocessingDocument.Open(Filename, false);
SdtBlock contents = wordDoc.MainDocumentPart.Document.Descendants<SdtBlock>().First();
List<string> contentList = new List<string>();
foreach (Hyperlink section in contents.Descendants<Hyperlink>())
{
    contentList.Add(section.Descendants<Text>().First().Text);
}

نصائح أخرى

فيما يلي منشور مدونة على الاستعلام عن مستندات Open XML WordProcessingml باستخدام LinQ إلى XML. باستخدام هذا الرمز، يمكنك كتابة استعلام كما يلي:

using (WordprocessingDocument doc =
    WordprocessingDocument.Open(filename, false))
{
    foreach (var p in doc.MainDocumentPart.Paragraphs())
    {
        Console.WriteLine("Style: {0}   Text: >{1}<",
            p.StyleName.PadRight(16), p.Text);
        foreach (var c in p.Comments())
            Console.WriteLine(
              "  Comment Author:{0}  Text:>{1}<",
              c.Author, c.Text);
    }
}

مشاركة مدونة: افتح XML SDK و LINQ إلى XML

- الواقع

يرى مستندات XML والبيانات كنقطة بداية. على وجه الخصوص، سترغب في استخدام LinQ إلى XML.

بشكل عام، لا تريد استخدام COM في تطبيق .NET.

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