我正在創建一個腳本,我將提供SharePoint 2007中的文檔庫列表中使用的URL來將做到以下幾點:的Excel和PowerShell的:批量查找和替換公式
- 在Excel中,查找鏈接到其他工作簿+表(XLS/XLSX)
- 如果發現的細胞內結構式中,與
http://servernew/sites/sitecollection/doclib
更換式鏈路http://serverold/site/doclib/
和保存 - 否則,關閉工作簿並移動到下一個登錄完整的URL和文件名任何變化
使用這個link的代碼作爲我的出發點,我不能讓下面的工作:
- 正則表達式表達使腳本檢測在公式中的URL
- 修改腳本,以取代舊單元格內公式中的新路徑。
- 一個每個分支處理比賽時被發現(保存並關閉),當它沒有找到(只是接近)
我不會詳細討論所有的研究我已經完成(信息非常清晰),只是在另一個線程中提到您可以在Excel中集中枚舉這些鏈接,但沒有給出任何示例或鏈接,並且我試圖枚舉links collection PowerShell(with 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()
由於任何人誰可以幫助和您的時間。 最好成績, 灰
+1很好的問題。 – brettdj