Сценарий Powershell сначала ошибается, но работает со второй попытки - PullRequest
0 голосов
/ 18 января 2020

У меня есть скрипт powershell, который ищет файлы xls и преобразует их в xlsx. Каждый раз, когда я запускаю его в первый раз, я получаю сообщение об ошибке

Unable to find type [Microsoft.Office.Interop.Excel.XlFileFormat].
At C:\Users\wpauling\Documents\Quarter Report Scripts\convert.ps1:2 char:18
+ ... xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpen ...
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Microsoft.Offic...el.XlFileFormat:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

Однако, когда я запускаю его в следующий раз, все работает как положено, в чем проблема, я схожу с ума. Вот мой сценарий

#Converts xls into xlsx
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook
write-host $xlFixedFormat
$excel = New-Object -ComObject excel.application
$excel.visible = $false
$folderpath = "C:\Users\user1\Documents\Q4"
$filetype ="*xls"
Get-ChildItem -Path $folderpath -Include $filetype -recurse | 
ForEach-Object `
{
    $path = ($_.fullname).substring(0, ($_.FullName).lastindexOf("."))

    "Converting $path"
    $workbook = $excel.workbooks.open($_.fullname)

    $path += ".xlsx"
    $workbook.saveas($path, $xlFixedFormat)
    $workbook.close()

    remove-item $_.fullname

}
$excel.Quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()

1 Ответ

2 голосов
/ 18 января 2020

Запустите сценарий со строкой

Add-Type -AssemblyName Microsoft.Office.Interop.Excel

Надеюсь, это поможет.

ps Конечно, гораздо менее наглядно, но вы также можете использовать числовое значение c enum 51 для переменной и не используйте Add-Type.

См .: Перечисление XlFileFormat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...