2009-08-05 4 views
8

मुझे लगता है कि एक Word 2007 (docx) दस्तावेज़ खुल जाएगा और अद्यतन उचित CustomXmlPart (इस प्रकार स्वयं दस्तावेज़ में सामग्री नियंत्रण को अद्यतन करने के रूप में वे करने के लिए मैप किया जाता है कोड का एक सा है CustomXmlPart) लेकिन यह एक नई फ़ाइल के रूप में इसे सहेजने के तरीके को कैसे काम नहीं कर सकता है! निश्चित रूप से यह मुश्किल नहीं हो सकता है! जब मैं यह मुठभेड़ CustomXmlPart अद्यतन करने फ़ाइल फ़ाइल द्वारा, -सहेजा जा रहा है एक OpenXML दस्तावेज़ (शब्द) एक टेम्पलेट से उत्पन्न

मेरे वर्तमान सोच है कि मैं टेम्पलेट खोलने के लिए और एक नया, रिक्त दस्तावेज़ में सामग्री की प्रतिलिपि की जरूरत है। मुझे पुराने रूप में बुलाओ लेकिन यह मेरे लिए थोड़ा सा घबराहट लगता है!

क्यों मैं सिर्फ एक WordprocessingDocument.SaveAs (फ़ाइल का नाम) नहीं कर सकते; ...?

कृपया मुझे बताओ कि मैं यहाँ कुछ सरल याद आ रही है।

अग्रिम धन्यवाद

+0

मैंने सोचा कि ओपनएक्सएमएल चीजों को eaiser - pfft। टाइमबिंग के लिए उपरोक्त को छोड़कर मैंने सूची में अगले कार्य को देखा - एक डॉकक्स फ़ाइलों को एक डॉक्स में एम्बेड करना (पूछो मत!) और मैं सिर्फ खुद को सिरदर्द दे रहा हूं! – DilbertDave

+0

* आसान * .. spec के आधार पर एक्सएमएल को हाथ से क्राफ्ट करने की तुलना में;) – JoeBrockhaus

उत्तर

14

क्या आप ओपनएक्सएमएल एसडीके का जिक्र कर रहे हैं? दुर्भाग्यवश, ओपनएक्सएमएल एसडीके 2.0 के रूप में, कोई SaveAs विधि नहीं है। आपको इसकी आवश्यकता होगी:

  1. अपनी टेम्पलेट फ़ाइल की एक अस्थायी प्रति बनाएं, जो भी आप चाहते हैं उसका नाम दें।
  2. उपरोक्त फ़ाइल पर अपने OpenXml परिवर्तन करें।
  3. सहेजें उचित वर्गों (यानी। मुख्य सामग्री या किसी विशेष हेडर के लिए someHeaderPart.Header.Save() विधि के लिए। myWordDocument.MainDocumentPart.Document.Save() पद्धति का उपयोग करके)।
+6

यह काफी है जो मैंने किया है - मुझे थोड़ा चूक लगता है। यदि आप कोई दस्तावेज़ खोलते हैं और इसे संशोधित करते हैं तो इसका कारण यह है कि आप अपडेट किए गए संस्करण को एक अलग नाम से सहेजना चाहेंगे। – DilbertDave

+1

यदि आप मेमोरीस्ट्रीम में फ़ाइल को सही पढ़ते हैं तो यह भी पूरा किया जा सकता है? मेरा मतलब है फाइल की प्रतिलिपि बनाने से बचें। –

+0

@PabloRomeo मुझे लगता है कि यह संभव हो सकता है, लेकिन यह एक दृष्टिकोण नहीं है जब मैं ओपनएक्सएमएल के साथ काम कर रहा था। यदि आप लक्ष्य हैं तो आप शायद 'मेमोरीस्ट्रीम' के साथ काम कर सकते हैं और अंत में वांछित फ़ाइल नाम में सहेज सकते हैं। ये लिंक मदद कर सकते हैं: [इन-मेमोरी ओपन एक्सएमएल दस्तावेज़ों के साथ काम करना] (http://msdn.microsoft.com/en-us/library/office/ee945362%28v=office.11%29.aspx) और [समस्या के साथ समस्या ओपनएक्सएमएल और मेमोरीस्ट्रीम?] (Http://amykinsgardiner.blogspot.com/2011/02/trouble-with-openxml-and-memorystreams.html) –

0

वास्तव में, आप कम से कम OpenXml SDK 2.5 में कर सकते हैं। हालांकि, मूल फ़ाइल की एक प्रति के साथ काम करने के लिए watchout, क्योंकि एक्सएमएल में परिवर्तन वास्तव में फ़ाइल में परिलक्षित होगा।

public void Load(string pathToDocx) 
    { 
     _tempFilePath = CloneFileInTemp(pathToDocx); 
     _document = WordprocessingDocument.Open(_tempFilePath, true); 
     _documentElement = _document.MainDocumentPart.Document; 
    }  

    public void Save(string pathToDocx) 
    { 
     using(FileStream fileStream = new FileStream(pathToDocx, FileMode.Create)) 
     { 
      _document.MainDocumentPart.Document.Save(fileStream); 
     } 
    } 

का होना "_document" एक WordprocessingDocument उदाहरण के रूप में: यहां आप तरीकों लोड और अपने कस्टम वर्ग के बचाना है (कुछ सत्यापन कोड, ... हटाने के बाद)।

0

ओपन एक्सएमएल एसडीके 2.5 बंद में परिवर्तनों को सहेजता है जब स्वत: सहेजना सच है। मेरा उत्तर यहां देखें: https://stackoverflow.com/a/36335092/3285954

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