क्या किसी नए सर्वर पर इंगित करने के लिए कई एमएस एक्सेल फाइलों की आंतरिक हाइपरलिंक को अद्यतन करने के लिए एक उपकरण / तकनीक है?


5

हम कई फ़ाइल शेयरों को एक में समेकित कर रहे हैं और हजारों एमएस एक्सेल (एक्सेस और वर्ड का उल्लेख नहीं करने के लिए) फाइलें हैं जो अन्य शीट्स के भीतर विभिन्न प्रकार के लिंक हैं। उनमें से कुछ को फ़ाइल के स्थान के सापेक्ष संदर्भित किया जाता है और अन्य में संदर्भित कार्यपुस्तिका (यानी I: /PUBLIC/username/file.xls) का संपूर्ण पथ समाहित है।

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

वहाँ किसी भी उपकरण या तकनीक किसी को भी इस तरह बड़ी फ़ाइलों को स्थानांतरित करने के लिए इस्तेमाल किया है? मेरे googling ने ExcelPipe ( http://www.datamystic.com/excelpipe.html ) पाया लेकिन उनकी वेबसाइट और उत्पाद की किसी भी समीक्षा को खोजने में मेरी अक्षमता ने मुझे आत्मविश्वास से नहीं छोड़ा।


मैं उस दर्द के प्रति सहानुभूति रख सकता हूं जो इस तरह से कुछ करने की कोशिश से जुड़ा होना चाहिए, लेकिन मुझे लगता है कि सबसे सीधा रास्ता यह करने के लिए एक VBA या C # प्रोग्राम को हथौड़ा करना है ...
allquixotic

इस तरह से संकेत इस प्रकार हैं ... हमने कुछ बहुत ठोस जावा पुस्तकालयों को पाया है जो हमें इस बिंदु पर ले गए हैं।
mwersch

आप POI की बात कर रहे हैं, है ना? हाँ। एक्सेल ऑटोमेशन का उपयोग करने की तुलना में संभवतः बहुत तेज़ है, हालांकि मौजूदा दस्तावेज़ों को संशोधित और सहेजते समय प्रारूप बेमेल से सावधान रहें ... POI हमेशा इसे आयात करने के साथ 100% वापस नहीं बचाता है ...
allquixotic

हाँ, jexcelapi और POI अब तक की पसंद के उपकरण हैं। हमारे अपने हैकरी के माध्यम से अपडेट से निपटने में हमारे पास सटीक प्रकार की चिंताएं हैं।
mwersch

ठीक है, आप इसे एक्सेल ऑटोमेशन COM एपीआई के साथ कर सकते हैं, लेकिन यह लगभग 20 गुना धीमा होगा (निष्पादित करने के लिए 20 गुना लंबा समय लें), लेकिन ट्रेडऑफ़ की गारंटी है कि एक्सेल का उपयोग करके 100% फ़ाइल प्रारूप अखंडता को ही रूपांतरण करना चाहिए। ।
allquixotic

जवाबों:


4

कई उपकरण उपलब्ध हैं:

और बहुत सारे। बैकअप लें और उसका परीक्षण करें।

मैंने एक VBA स्क्रिप्ट लिखी है जो किसी भी फ़ोल्डर में सभी फाइलों और उसके लिंक को सूचीबद्ध करती है, जो इस तरह के कार्य के लिए उपयोगी हो सकती है।


1

मैंने इसके साथ बहुत अधिक समय बिताया, लेकिन मुझे लगता है कि मुझे आखिरकार एक समाधान मिल गया :)

पॉवरशेल स्क्रिप्ट डाउनलोड करें और इसे चलाएं। यह आपसे एक फोल्डर मांगता है। आप चाहते हैं के रूप में कई Excel फ़ाइलों के साथ एक फ़ोल्डर चुनें। इसके बाद, आपको अपना पुराना खोज स्ट्रिंग और अपना नया प्रतिस्थापन स्ट्रिंग दर्ज करना होगा। यह तब आपकी खोज और स्ट्रिंग की जगह का उपयोग करके सभी चयनित फ़ाइलों में सभी हाइपरलिंक बदल देगा।

यहाँ छवि विवरण दर्ज करेंयहाँ छवि विवरण दर्ज करें

यह संक्षेप में कैसे काम करता है

  1. फ़ोल्डर के लिए पूछें
  2. पुराने खोज स्ट्रिंग के लिए पूछें
  3. नई प्रतिस्थापन स्ट्रिंग के लिए पूछें
  4. हर XLS, XLSX, XLSB फ़ाइल या जो भी रेगेक्स एक्सप्रेशन से .*XLS?मेल खाता है , के माध्यम से लूप करें
  5. वर्तमान कार्यपुस्तिका में प्रत्येक शीट के माध्यम से लूप
  6. वर्तमान पत्रक में प्रत्येक हाइपरलिंक के माध्यम से लूप
  7. हाइपरलिंक पता (केस असंवेदनशील) बदलने की कोशिश करें
  8. वर्तमान कार्यपुस्तिका सहेजें
  9. काम खत्म होने पर सब कुछ बंद कर दें

कोड

$object = New-Object -comObject Shell.Application  
$folder = $object.BrowseForFolder(0, 'Select the folder', 0)    
$oldname = Read-Host 'Enter your old string to search for'
$newname = Read-Host 'Enter your new string'

if (!$folder -or !$oldname -or !$newname) {exit} 

$excel = New-Object -comObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

foreach ($file in Get-ChildItem -literalPath $folder.self.Path*.xls?) {
    $workbook = $excel.Workbooks.Open($file.name)    
    foreach ($sheet in $workbook.Sheets) {                    

        foreach ($cell in $sheet.Hyperlinks) {
            $cell.Address = $cell.Address -ireplace $oldname, $newname                        
        }             
    }
    $workbook.Save()
    $workbook.Close()
}
$excel.quit()    

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect() 
[System.GC]::WaitForPendingFinalizers() 

कृपया इसका परीक्षण करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.