Я пытаюсь автоматизировать автоматизацию excel, которая устанавливает нашу компанию addin в excel, а затем загружает библиотечный файл (библиотека .xlsm, который содержит подпрограммы и функции макроса библиотеки). После этого для каждого теста я загружаю соответствующий файл test.xlsm и выполняю макросы. Все это я использую powershell (V3). Мой скрипт вызывается на одной машине и выполняется на другом удаленном компьютереВызов «Открыть» с аргументом «1»: ... »в Excel после установки моего addin
Это, как я установить мою надстройку:.
kill -processname excel
$Release1RootDir = $workspace + "\Release1"
$release1Path = Get-ChildItem -Force $release1RootDir
if($release1Path -eq $Null) {
echo "Error: No sub-folder found having MyAddin Installer inside "$release1RootDir
}
else {
$release1 = $release1Path.name.replace('_', '.')
$ExcelAddinInstaller = ($release1Path.FullName + "\MyAddin.msi")
$ExcelAddinTargetDir = ($Release1Path.FullName)
$msiexecPath = "msiexec.exe"
if(Test-Path -Path $ExcelAddinInstaller){
echo "Version for MyAddin inside Release1: "$Release1
$proc = Start-Process $msiexecPath -ArgumentList /x, `"$ExcelAddinInstaller`", TARGETDIR=$ExcelAddinTargetDir, /quiet, /lvx, "D:\Temp\uninstall.log" -Wait
$proc = Start-Process $msiexecPath -ArgumentList /i, `"$ExcelAddinInstaller`", TARGETDIR=$ExcelAddinTargetDir, /quiet, /lvx, "D:\Temp\install.log" -Wait -ErrorAction Stop
echo "Installing addin"
Start-Process "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" -ArgumentList /tlb, "C:\Users\Serviceadmin\Addin\MyAddin\Release\MyAddin.dll"
}
else{
echo $ExcelAddinInstaller
}
}
PS: Я добавляю в DLL-файл, так как, помощник функц ion в моих макросах вызывает мой код C#.
Однако, при открытии любого из этих XLSM файлов, я получаю следующее сообщение об ошибке:
Exception calling "Open" with "1" argument(s): "Microsoft Excel cannot access the file 'D:\ABC\XYZ\workspace\library.xlsm'. There are several possible reasons: The file name or path does not exist. The file is being used by another program. The workbook you are trying to save has the same name as a currently open workbook." At C:\Users\Serviceadmin\AppData\Local\Temp\hudson.ps1:94 char:3 + $libraryBook = $excel.workbooks.open("$xlLibraryPath\$xlLibraryFileName"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ComMethodTargetInvocation
выше ошибка появляется, несмотря на пути файлов является правильным. Это, как я открыть файлы с помощью PowerShell:
$excel = new-object -comobject excel.application;
$excel.visible = $true;
$libraryBook = $excel.workbooks.open("$xlLibraryPath\$xlLibraryFileName");
$testWorkbook = $excel.workbooks.open("$testFile")
$excel.Run("$xlLibraryFileName!Initialize", "$testAct")
$loginsuccess = $excel.Run("$xlLibraryFileName!Login", "$xlenvironment", "$xlUserName", "$xlPassword");
if($loginsuccess)
{
$excel.Run("PerformTest");
$excel.Run("$xlLibraryFileName!Logout");
}
$testWorkbook.close($false)
$libraryBook.close($false)
$excel.quit()
Я проверил следующее: установлен
1. Excel в необходимом машинно Да, Excel 2013
2. Путь к XLSM Files- Все присутствуют
3. Успешная установка аддона
Есть ли что-то, что мне не хватает?
Заранее благодарен! :)
Вы действительно уверены, что путь верный? msgstr "невозможно получить доступ к файлу '\ library.xlsm'" звучит как $ xlLibraryPath null? Btw: Обычно я предпочитаю путь объединения для объединения путей, так как он помогает избежать ошибок с отсутствующими косыми чертами. – whatever
Я полностью исключил полный путь в вышеупомянутом сообщении ... Но, да, это правильно .... PS: Я добавил путь теперь. – Rishi
Является ли это подключенным дисководом? Имеет ли профиль, запускающий скрипт, этот диск? – TheMadTechnician