Скрипт конвертирования файлов xls в xlsm

##############################
# Скрипт для конвертирования файлов *.xls -> *.xlsm
##############################
cls
#Подключаем сборку для того, чтобы выбрать с ее помощью тип сохраняемого файла
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
#Выбираем тип сохраняемых файлов
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbookMacroEnabled
#Путь к папке с xls-файлами
$Path2xls="\\server\share"
#"Запускаем" Excel (создаем COM-объект Excel.Application)
$objExcel=New-Object -comobject Excel.Application
#Отключаем уведомления пользователя (например, о перезаписи файла)
$objExcel.DisplayAlerts=$False
#получим все xls-файлы в папке
$xlsFiles=@(dir (Join-Path $Path2xls "*.*") -Filter *.xls -Include *xls)
#Для каждого xls-файла в папке...
for ($i=0; $i -lt $xlsFiles.Length; $i++) {
    Write-Progress -Activity "обрабатываем файл $($xlsFiles[$i])" -PercentComplete ([Math]::Round($i*100/$xlsFiles.Length))
    #Start-Sleep -Milliseconds 1
    #
    #выполняем открытие файла ("Рабочей книги") в Excel
    $objWorkbook=$objExcel.Workbooks.Open($xlsFiles[$i].FullName)
    $NewFileName=Join-Path $xlsFiles[$i].DirectoryName "$($xlsFiles[$i].BaseName).xlsm"
    $objWorkbook.SaveAs($NewFileName, $xlFixedFormat);
    #Закрываем книгу Excel
    $objExcel.Workbooks.Close()
    #
}
#
#Выходим из Excel (вернее даем команду на выход из Excel)
$objExcel.Quit()
#обнуляем объект
$objExcel = $null
#запускаем принудительную сборку мусора для освобождения памяти и окончательного завершения процесса
[gc]::collect()
[gc]::WaitForPendingFinalizers()
#

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.