#powershell #powerpoint #add-in
#powershell #powerpoint #надстройка
Вопрос:
Я создал надстройку для PowerPoint и нашел скрипт для установки powershell. Это сценарий:
[CmdletBinding()]
Param(
[Parameter(Position=0,Mandatory=$true)]
[String]$AddinPath,
[Parameter(Mandatory=$false)]
[Switch]$Reinstall,
[Parameter(Mandatory=$false)]
[Switch]$NoCopy
)
# Ensure that any errors we receive are considered fatal
$ErrorActionPreference = 'Stop'
# The path to the default folder to copy Excel add-ins
$ExcelAddinsPath = Join-Path $env:APPDATA 'MicrosoftAddIns'
if (Test-Path -Path $AddinPath -PathType Leaf) {
$Addin = Get-ChildItem -Path $AddinPath
if ($Addin.Extension -NotIn ('.ppam')) {
Write-Error 'The file does not appear to be a Power Point add-in.'
}
} else {
Write-Error 'The add-in file path does not appear to be valid.'
}
try {
Add-type -AssemblyName office
$Application = New-Object -ComObject powerpoint.application
$Application.visible = [Microsoft.Office.Core.MsoTriState]::msoTrue
$slideType = "microsoft.office.interop.powerpoint.ppSlideLayout" -as [type]
$blanklayout = $slideType::ppLayoutTitleOnly
$presentation = $application.Presentations.add()
$slide = $Presentation.Slides.Add($presentation.Slides.Count 1, 15)
} catch {
Write-Error 'Microsoft Excel does not appear to be installed.'
}
try {
$PowerPointAddins = $Application.Addins
$AddinInstalled = $PowerPointAddins | ? { $_.Name -eq $Addin.Name }
if (!$AddinInstalled -or $Reinstall) {
if (!(Test-Path -Path $ExcelAddinsPath -PathType Container)) {
New-Item -Path $ExcelAddinsPath -ItemType Directory
}
if (!$NoCopy) {
Copy-Item -Path $Addin.FullName -Destination $ExcelAddinsPath -Force
$Addin = Get-ChildItem -Path (Join-Path $ExcelAddinsPath $Addin.Name)
$Addin.IsReadOnly = $true
}
$NewAddin = $presentation.Application.AddIns.Add('C:UsersAdminAppDataRoamingMicrosoftAddInsAddinthatIcreated.ppam', $true)
$NewAddin.Installed = $true
Write-Host ('Add-in "' $Addin.BaseName '" successfully installed!')
} else {
Write-Host ('Add-in "' $Addin.BaseName '" already installed!')
}
} finally {
$Application.Quit()
}
Этот скрипт берет файл .ppam и помещает в AddinFile, но выдает ошибку и это сообщение:
Не удается найти перегрузку для «Добавить» и количество аргументов: «2»
это сообщение появляется, когда сценарий выполняет эту инструкцию (строка 60):
$NewAddin = $presentation.Application.AddIns.Add('C:UsersAdminAppDataRoamingMicrosoftAddInsAddinthatIcreated.ppam', $true)
в чем источник проблемы и как я могу ее решить? Спасибо за помощь!
Комментарии:
1. Где вы взяли скрипт? Согласно документам, AddIns.Add имеет только один параметр.
2. Я взял с этой страницы powershellgallery.com/packages/PSWinGlue/0.3.1/Content /… но проблема в том, что этот скрипт предназначен для добавления в Excel
3. Как и выше — он принимает только один аргумент. Попробуйте удалить
,$true
из этой строки, хотя это может не сработать в любом случае; вам нужно будет проверить, что весь скрипт работает для Powerpoint, а не для методов Excel.
Ответ №1:
Проблема вызвана смешиванием методов Excel и PowerPoint. Хотя имена совпадают, прототипы функций — нет. Приемлемые версии можно найти в Google excel addins.add
и powerpoint addins.add
, которые предоставят ссылки на страницы документации Microsoft.
Для Powerpoint AddIns.Add()
метод принимает один параметр — имя файла.
Для Excel AddIns.Add()
метод принимает два параметра: имя файла и копировать файл.
В качестве разрешения измените вызов, чтобы в нем был только один параметр, например,
$NewAddin = $presentation.Application.AddIns.Add('C:UsersAdminAppDataRoamingMicrosoftAddInsAddinthatIcreated.ppam')