2009-08-18 18 views
5

मैं अपने वेब सर्वर पर एक वर्ड 2007 या अधिक docx फ़ाइल अपलोड करना चाहता हूं और सामग्री की तालिका को एक साधारण xml संरचना में परिवर्तित करना चाहता हूं। पारंपरिक वीबीए के साथ डेस्कटॉप पर ऐसा करना ऐसा लगता है जैसे यह आसान होता। Docx फ़ाइल बनाने के लिए प्रयुक्त WordprocessingML XML डेटा को भ्रमित करना भ्रमित है। ऑब्जेक्ट उन्मुख फैशन में दस्तावेज़ को नेविगेट करने के लिए कोई तरीका है (COM के बिना)?मैं एएसपी.NET ऐप में वर्ड डॉक्स को कैसे पूछ सकता हूं?

उत्तर

4

मैं अत्यधिक Open XML SDK 2.0 में देखने की सलाह देता हूं। यह एक सीटीपी है, लेकिन मुझे COM से निपटने के बिना xmlx फ़ाइलों में हेरफेर करने में यह बेहद उपयोगी पाया गया है। प्रलेखन थोड़ा सा स्केची है, लेकिन देखने के लिए महत्वपूर्ण चीज DocumentFormat.OpenXml.Packaging.WordprocessingDocument क्लास है। यदि आप .zip के एक्सटेंशन का नाम बदलते हैं और एक्सएमएल फाइलों में खोदते हैं तो आप .docx दस्तावेज़ को अलग कर सकते हैं। ऐसा करने से, ऐसा लगता है कि सामग्री की एक तालिका "संरचित दस्तावेज़" टैग में निहित है और शीर्षलेख जैसी चीजें वहां से हाइपरलिंक में हैं। इसके साथ थोड़ा सा रखकर, मैंने पाया कि इस तरह कुछ ऐसा करना चाहिए (या कम से कम आपको एक प्रारंभिक बिंदु दें)।

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); 
} 
0

XML Documents and Data को शुरुआती बिंदु के रूप में देखें। विशेष रूप से, आप LINQ से एक्सएमएल का उपयोग करना चाहेंगे।

सामान्य रूप से, आप .NET अनुप्रयोग में COM का उपयोग नहीं करना चाहते हैं।

3

यहाँ एक्सएमएल के लिए LINQ का उपयोग कर खुला एक्सएमएल WordprocessingML दस्तावेजों क्वेरी करने पर एक ब्लॉग पोस्ट है। उस कोड का उपयोग करके आप एक प्रश्न इस प्रकार लिख सकते हैं:

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); 
    } 
} 

ब्लॉग पोस्ट: Open XML SDK and LINQ to XML

-Eric

+1

मैं ओपन एक्सएमएल को आपकी पोस्ट पढ़ें - महान काम! –

संबंधित मुद्दे