PoSH и Excel
Добрый день!!! Поставили задачу: есть 200 файлов excel нужно зайти в файл сменить ориентацию на горизонтальную распечатать как сделать с помощью скрипта?
Мои наработки пока не знаю как передать excel код
Код:
$excel = new-object -comobject excel.application
$excelFiles = Get-ChildItem -Path C:\fso -Include *.xls, *.xlsm -Recurse
Foreach($file in $excelFiles)
{
$workbook = $excel.workbooks.open($file.fullname)
$worksheet = $workbook.worksheets.item(1)
$excel.Run('Sub orientPage()
With ActiveDocument.PageSetup
If .Orientation <> wdOrientPortrait Then
.Orientation = wdOrientPortrait
Else
.Orientation = wdOrientLandscape
End If
End With
End Sub')
$workbook.save()
$workbook.close()
}
$excel.quit()
|
Цитата:
Код:
$excel.Run('Sub orientPage()
With ActiveDocument.PageSetup
If .Orientation <> wdOrientPortrait Then
.Orientation = wdOrientPortrait
Else
.Orientation = wdOrientLandscape
End If
End With
End Sub')
|
Непонятно, причём тут процедура для Microsoft Word? В Excel константа «xlLandscape» из перечня «XlPageOrientation» равна 2. Уберите это.
Используйте:
Код:
$worksheet.PageSetup.Orientation = 2
Не проверялось.
|
Спасибо за помощь вот почти готовый код
Код:
$excel = new-object -comobject excel.application
$excelFiles = Get-ChildItem -Path D:\fso -Include *.xls, *.xlsm -Recurse
Foreach($file in $excelFiles)
{
$workbook = $excel.workbooks.open($file.fullname)
$worksheet = $workbook.worksheets.item(1)
$worksheet.PageSetup.Orientation = 2
$workbook.PrintOut()
$excel.ActiveWorkbook.SaveAs($file)
$Excel.Workbooks.Close()
}
$excel.quit()
но проблема в том что он сохраняет в туже папку и предлагает заменить файл как можно автоматически согласиться и почему то в диспетчере задач остаются excel.exe файлы по 6Мб
И еще Iska такой вопрос может подскажите, где посмотреть параметры к примеру перевернуть страницу или еще какие функции может excel через командную строку
|
Цитата:
Цитата Ubiquiti
но проблема в том что он сохраняет в туже папку и предлагает заменить файл »
|
Используйте просто «.Save()». У Вас же нормально было:
Цитата:
Цитата Ubiquiti
Код:
…
$workbook.save()
…
»
|
Цитата:
Цитата Ubiquiti
где посмотреть параметры к примеру перевернуть страницу »
|
В описании объектной модели Excel.
Самое простое — запишите макрос потребных действий. Затем откройте модуль с записанным текстом макроса. Найдите потребное место — метод или свойство. В данном случае это может выглядеть так:
Стать курсором на этот метод/свойство и нажать F1.
Цитата:
Цитата Ubiquiti
и почему то в диспетчере задач остаются excel.exe файлы по 6Мб »
|
Особенности работы с Automation со стороны PowerShell по отношению к Excel. Похожая проблема наблюдалась и в WSH JScript (куда в конце концов добавили отдельный метод под это дело). Более опытные коллеги подскажут, как после «.Quit()» «сказать» сборщику мусора PowerShell, что можно освободить память от этого объекта. Я практически не работаю с PowerShell и очень слабо его знаю.
Это не командная строка, это Automation ( OLE Automation - Wikipedia, the free encyclopedia).
|
Окончательный вариант
Код:
$excel = new-object -comobject excel.application
#откуда берем файлы
$excelFiles = Get-ChildItem -Path D:\fso -Include *.xls, *.xlsm -Recurse
#в цикле перебираем файлы из указанной папки
Foreach($file in $excelFiles)
{
$workbook = $excel.workbooks.open($file.fullname)
$worksheet = $workbook.worksheets.item(1)
# переворачиваем страницу в ландшафтный вариант (портретный 1 поставить надо)
$worksheet.PageSetup.Orientation = 2
# печатаем на принтер по умолчанию
$workbook.PrintOut()
# сохраняем
$excel.ActiveWorkbook.Save($file)
$Excel.Workbooks.Close()
}
$excel.quit()
|
Цитата:
Цитата Ubiquiti
# сохраняем $excel.ActiveWorkbook.Save($file) »
|
Просто «.Save()», без «$file». Он всё равно игнорируется (даже если не сообщает об ошибке): Workbook.Save Method (Excel).
|
Время: 13:58.
© OSzone.net 2001-