я работаю над созданием сценария, который я приведу список библиотек документов SharePoint 2007, на который будет делать следующее:Excel & Powershell: Bulk Найти и заменить URL, используемый в формулах
- В Excel, найти формулы в пределах ячеек, которые ссылаются на другие книги + листы (XLS/XLSX)
- Если найдено, замените формулу ссылку
http://serverold/site/doclib/
сhttp://servernew/sites/sitecollection/doclib
и сохранить - Else, закройте книгу и перейти на следующий Log полного URL и имя файла любые изменения
Использование кода на этой link в моей отправной точки я не могу получить следующую работу:
- Регулярное выражение выражение, чтобы сделать сценарий обнаружения URL в формулах
- изменить сценарий, чтобы заменить старый путь с новым путем в формуле внутри ячеек.
- для каждого ветви иметь дело с тем, когда обнаруживается совпадение (сохранить и закрыть), и когда он не нашел (только близко)
Я не вдаваясь в подробности о всех исследований I» (информация очень светлая на земле), просто упоминается в другом потоке, что вы можете перечислить эти ссылки централизованно в Excel, но ни один пример или ссылки не были указаны, и когда я попытался перечислить links collection в PowerShell (с Excel 2010), он пуст с примером рабочей книги, которую я использую, которую я знаю как «ссылки» в этом смысле.
Пример для перечисления ссылок коллекции:
$File = "C:\temp\example.xls"
$Excel = New-Object -ComObject Excel.Application
$Excel.visible = $true
$Workbook = $Excel.workbooks.open($file)
$Workbook.LinkSources
Так что возникает вопрос, какой метод является правильным?
Пример Excel формула
=+'http://server.old/site/site/Work in Progress `enter code here`Documents/Statements/[Hierarchy2011.xls]Reports'!$AD$37+'http://server.old/site/site/Work in Progress Documents/
Скрипт для перечисления ссылок (по ссылке я уже упоминал в моей отправной точке) -
$path = "C:\temp"
$excelSheets = Get-Childitem -Path $path -Include *.xls,*.xlsx -Recurse
$excel = New-Object -comobject Excel.Application
$excel.visible = $false
foreach($excelSheet in $excelSheets)
{
$workbook = $excel.Workbooks.Open($excelSheet)
"There are $($workbook.Sheets.count) sheets in $excelSheet"
For($i = 1 ; $i -le $workbook.Sheets.count ; $i++)
{
$worksheet = $workbook.sheets.item($i)
"`tLooking for links on $($worksheet.name) worksheet"
$rowMax = ($worksheet.usedRange.rows).count
$columnMax = ($worksheet.usedRange.columns).count
For($row = 1 ; $row -le $rowMax ; $row ++)
{
For($column = 1 ; $column -le $columnMax ; $column ++)
{
[string]$formula = $workSheet.cells.item($row,$column).formula
if($formula -match "\w?:\\\w*\\\[\w*\.xls\w?\]") {"`t`t$($formula)"}
} #end for $column
} #end for $row
$worksheet = $rowmax = $columnMax = $row = $column = $formula = $null
} #end for
$workbook.saved = $true
$workbook.close()
} #end foreach
$excel.quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
Спасибо всем, кто может помочь и за ваше время , Bests, Ash
+1 большой вопрос. – brettdj