我需要創建一個 Powershell 腳本,它可以搜索我們創建的自定義安裝的 Excel-Addin。然后我需要獲取插件所在的路徑,然后將支持檔案復制到該路徑。
問題是我不知道插件的安裝路徑,它可能因機器而異,所以我需要能夠按名稱獲取插件物件,然后檢索插件的路徑,然后復制支持檔案到那條路。
我發現的所有示例都使用 path name :
try {
$Excel = New-Object -ComObject Excel.Application
} catch {
Write-Error 'Microsoft Excel does not appear to be installed.'
}
try {
$ExcelAddins = $Excel.Addins
$AddinInstalled = $ExcelAddins | ? { $_.Name -eq "MyAddinName" } // this doesnt work, needs path
if (!$AddinInstalled ) {
Write-Host ('Add-in "' $Addin.BaseName '" Not installed!')
} else {
// now get the path and copy supporting file to the path
...
...
Write-Host ('Add-in "' $Addin.BaseName '" supporting file copied successfully!')
}
} finally {
$Excel.Quit()
}
上面的代碼不起作用,因為我不提供路徑。有沒有辦法按名稱獲取插件或回圈通過插件并檢查名稱,直到找到我需要的那個,然后獲取路徑,以便我可以將支持檔案復制到該路徑?
uj5u.com熱心網友回復:
$Excel.Addins回傳具有比 Name 更多屬性的物件,但 Name 屬性是插件檔案名并包括擴展名,如.XLLor .XLAM。
您可以探測的另一個屬性是.Title.
嘗試
try {
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $false
# you may also try Where-Object { $_.Title -match 'MyAddinName' }
$myAddIn = $Excel.Addins | Where-Object { $_.Name -match 'MyAddinName' }
if ($myAddIn) {
Write-Host "AddIn '$($myAddIn.Name)' found in '$($myAddIn.Path)'"
# copy the supporting file to the Addin's path
Copy-Item -Path 'X:\YourSupportingFile' -Destination $myAddIn.Path
}
else {
Write-Warning "Addin 'MyAddinName' not found"
}
}
catch {
Write-Warning "Error:`r`n$($_.Exception.Message)"
}
finally {
if ($Excel) {
# close and cleanup COM object
$Excel.Quit()
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
}
這假設只找到一個具有該名稱的插件。您也可以使用使用通配符
的正則運算式運算子而不是-match-like '*MyAddinName*'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/415799.html
標籤:
