2013-01-09 91 views
5

के माध्यम से वर्ड डॉक्यूमेंट में फॉर्म फ़ील्ड अपडेट करना संभव है, यह संभवतः बहुत सारे प्रश्न उठा सकता है, इसलिए मैं यथासंभव विशिष्ट होने की कोशिश करूंगा। मैं एक तीसरे पक्ष के आवेदन का समर्थन करने का प्रभारी हूं जो मेरा काम करता है। इस एप्लिकेशन द्वारा किए गए कार्यों में से एक है। डॉट फाइलों से शब्द दस्तावेज़ों को खींचने वाले डेटाबेस से जानकारी के साथ खींचें। यह करने के लिए यह MERGEFIELD फ़ील्ड का उपयोग करता है। जब यह डेटा खींचा जाता है, तो यह सामान्य दिनांक फ़ील्ड और प्रिंटडेट फ़ील्ड को रहने की अनुमति देता है, लेकिन बनाया गया (मुझे जिसकी आवश्यकता है) और सहेजे गए फ़ील्ड पूरी तरह से गड़बड़ हो जाते हैं। यह आज की तारीख को सम्मिलित करने के बजाए मूल टेम्पलेट निर्माण तिथि रखता है जैसे कि दस्तावेज़ निर्माण दिनांक सामान्य रूप से टेम्पलेट्स की तरह होता है, और फ़ील्ड को अमान्य करता है ताकि यह किसी बनाए गए फ़ील्ड के बजाय सादा पाठ हो, ताकि आप इसे अपडेट नहीं कर सकें। जब मेल फ़ील्ड का उपयोग मेल मर्ज के साथ किया जाता है तो मुझे मानक व्यवहार नहीं होता है या नहीं, यह सही जवाब नहीं मिला। मैं सामान्य तिथियों का उपयोग करता हूं, लेकिन इन दस्तावेजों को कुछ दिनों के दौरान संपादित किया जा सकता है, अंततः इसे "स्थायी" प्रतिलिपि के लिए पीडीएफ में परिवर्तित किया जा रहा है। यदि आप प्रोग्राम से दस्तावेज़ बनाते हैं तो इसे अगले दिन खोलें, यह स्वचालित रूप से दिनांक अपडेट करता है ... जो हम चाहते हैं, उसे पहले दिन होने की आवश्यकता नहीं है।क्या स्क्रिप्ट

मेरे पास टेम्पलेट के बनाए गए अद्यतन को अद्यतन करने के लिए एक पावरहेल स्क्रिप्ट का उपयोग करने के लिए एक epiphany था। साथ तीन लाइनों में ऐसा करने में कामयाब रहे: यह स्क्रिप्ट

$a = Get-Date 
$b = Get-Item "Q:\CUSTOM\DATETEST.dot" 
$b.CreationTime = $a 

अच्छा काम करता है, और फ़ाइल जानकारी अद्यतन किया जाता है। हालांकि, इस दस्तावेज़ को प्रतिबिंबित करने के लिए दस्तावेज़ में वास्तविक शब्द प्राप्त करने के लिए, आपको Word में जाना होगा, फॉर्म में फ़ील्ड को F9 के साथ रीफ्रेश करना होगा, फिर इसे सेव करें। यहां तक ​​कि अद्यतित सृजन तिथि के साथ, जब तक आप रीफ्रेश नहीं करते हैं और मैन्युअल रूप से टेम्पलेट को सहेजते हैं, तब तक दस्तावेज़ दस्तावेज़ शब्द को तब भी पुराना दिनांक दिखाता है जब आप वर्ड में या अन्य एप्लिकेशन से दस्तावेज़ खींचते हैं। ये रूप सुरक्षित नहीं हैं, इसलिए यह कोई मुद्दा नहीं है। मैंने शब्द फ़ाइलों को संपादित करने के लिए कुछ पावरहेल स्क्रिप्ट देखी, लेकिन तारीख फ़ील्ड रीफ्रेश करने के लिए बिल्कुल कोई नहीं मिला। मैंने इस स्क्रिप्ट को संशोधित दिनांक और फ़ॉर्म में सेव किए गए फ़ील्ड का उपयोग करके करने की कोशिश की, लेकिन इसमें फ़ॉर्म में वास्तव में और वास्तव में बचत की आवश्यकता थी। क्या पावरहेल या बैच (या कोई भी स्क्रिप्टिंग भाषा है, इस बिंदु पर परवाह नहीं है) में कोई तरीका है जो मुझे दस्तावेज़ों में फॉर्म फ़ील्ड रीफ्रेश करने में सक्षम बनाता है और फिर उन्हें सहेजता है, या कोई इस बारे में किसी अन्य तरीके से सोच सकता है? मेरे पास कई दस्तावेज हैं जिन्हें इसकी आवश्यकता होगी, इसलिए इसे हर सुबह मैन्युअल रूप से करना भी अव्यवहारिक है।

संपादित करें: नीचे दिए गए अनुसार मुझे निम्न कोड मिला है। इस कोड में मैंने यह भी पाया कि मुझे दस्तावेज़ बदलने की जरूरत है। दस्तावेज़ों में जोड़ें। खोलें। मैं ध्यान दूंगा कि यह सहेजने की तारीख को जिस तरह से जरूरी तरीके से छेड़छाड़ करने के लिए काम करता था, लेकिन अभी भी एक रहस्य बना हुआ है।

$word=new-object -com Word.Application 
$doc=$word.Documents.Add($filename) 
$word.Visible=$False 
$word.ActiveDocument.Fields.Update() 
$doc.SaveAs([REF]$filename) 
$doc.Close() 
$word.Quit() 
+0

Google में मेरा सटीक प्रश्न शीर्षक खोजने के बाद निम्नलिखित पाया गया ... मुझे नहीं पता कि मैं अपनी खोजों के समान क्यों नहीं हो सकता था: 'कोड $ शब्द = नया-ऑब्जेक्ट -कॉम वर्ड। आवेदन $ दस्तावेज़ = $ word.Documents.Add ($ फ़ाइल का नाम) $ word.Visible = $ झूठी $ word.ActiveDocument.Fields.Update() $ doc.SaveAs ([REF] $ फ़ाइल का नाम) $ doc.Close() $ word.Quit() 'यह अभी भी सही काम नहीं करता है क्योंकि यह उन्हें टेम्पलेट नहीं खोलता और सहेजता है, बल्कि खोलता है और एक .docx को सहेजने का प्रयास करता है। अभी भी सुझावों के लिए खुला है। –

+1

एसओ में आपका स्वागत है!चीजों को और अधिक पठनीय बनाने के लिए, कृपया अपनी मूल पोस्ट को आपके द्वारा प्राप्त कोड के साथ संपादित करें बल्कि इसे एक टिप्पणी में रखें। – Nick

+0

सुझाव के लिए धन्यवाद ... इस बात पर यकीन नहीं था कि नया पाया गया कोड जोड़ने के लिए पसंदीदा विधि क्या थी। मुझे यह सब मिला है लेकिन पता लगाया गया है ... मैं अभी भी निर्माण की तारीख का उपयोग करता हूं लेकिन यह फ़ील्ड्स अपडेट के साथ भी अपडेट नहीं होगा। उपरोक्त कोड के साथ मुझे जो कुछ चाहिए, उसे सहेजता है, हालांकि यह मेरा इरादा नहीं था। –

उत्तर

2

टेम्पलेट के रूप में अपने दस्तावेज़ को बचाने के लिए, निम्न कोड का उपयोग करें:

$word = new-object -com Word.Application 
$doc = $word.Documents.add($filename) 
$word.Visible = $False 
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat],"wdFormatTemplate") 
$doc.SaveAs([ref]$filename2,[ref]$saveFormat) 
$doc.Close() 
$word.Quit() 

इस टेम्पलेट के लिए अपरीक्षित है, लेकिन मैं नहीं बल्कि उसके बाद डिफ़ॉल्ट .docx.doc के रूप में बचत के साथ काम करने के लिए इसे मिला है। साथ ही, यह फ़ाइल को सहेजने नहीं देगा यदि यह खुली फ़ाइल के समान नाम है। यही कारण है कि मैंने इसे $filename2 में बदल दिया। इसे काम करने के लिए आपको कुछ नामकरण युक्तियां करनी पड़ सकती हैं, लेकिन इससे आपको फ़ाइल को सहेजने के तरीके से समस्या का सामना करना पड़ेगा।

+0

$ दस्तावेज़ = $ Word.Document.open ($ filename) दस्तावेज़ के बजाय। टेम्पलेट्स के लिए काम जोड़ें। हालांकि, जैसा कि मैं किसी कारण से पहले कह रहा था, निर्माण तिथियां अपडेट नहीं होती हैं। मैं केवल सहेजे गए उपयोगों का उपयोग करूंगा (क्योंकि मूल एप्लिकेशन वैसे भी पाठ में परिवर्तित होता है) और इसे एक दिन कॉल करें। धन्यवाद! –