मैंने इसके साथ बहुत अधिक समय बिताया, लेकिन मुझे लगता है कि मुझे आखिरकार एक समाधान मिल गया :)
पॉवरशेल स्क्रिप्ट डाउनलोड करें और इसे चलाएं। यह आपसे एक फोल्डर मांगता है। आप चाहते हैं के रूप में कई Excel फ़ाइलों के साथ एक फ़ोल्डर चुनें। इसके बाद, आपको अपना पुराना खोज स्ट्रिंग और अपना नया प्रतिस्थापन स्ट्रिंग दर्ज करना होगा। यह तब आपकी खोज और स्ट्रिंग की जगह का उपयोग करके सभी चयनित फ़ाइलों में सभी हाइपरलिंक बदल देगा।
→
यह संक्षेप में कैसे काम करता है
- फ़ोल्डर के लिए पूछें
- पुराने खोज स्ट्रिंग के लिए पूछें
- नई प्रतिस्थापन स्ट्रिंग के लिए पूछें
- हर XLS, XLSX, XLSB फ़ाइल या जो भी रेगेक्स एक्सप्रेशन से
.*XLS?
मेल खाता है , के माध्यम से लूप करें
- वर्तमान कार्यपुस्तिका में प्रत्येक शीट के माध्यम से लूप
- वर्तमान पत्रक में प्रत्येक हाइपरलिंक के माध्यम से लूप
- हाइपरलिंक पता (केस असंवेदनशील) बदलने की कोशिश करें
- वर्तमान कार्यपुस्तिका सहेजें
- काम खत्म होने पर सब कुछ बंद कर दें
कोड
$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()
कृपया इसका परीक्षण करें