PowerShell - [решено] PoSH и Excel

Ответить
Аватара пользователя
Ubiquiti

PowerShell - [решено] PoSH и Excel

Сообщение Ubiquiti »

Добрый день!!! Поставили задачу: есть 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()
Аватара пользователя
Iska

Re: PowerShell - [решено] PoSH и Excel

Сообщение Iska »

Цитата:





Код:

Код: Выделить всё

$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

Не проверялось.
Аватара пользователя
Ubiquiti

Re: PowerShell - [решено] PoSH и Excel

Сообщение Ubiquiti »

Спасибо за помощь вот почти готовый код





Код:

Код: Выделить всё

$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 через командную строку
Аватара пользователя
Iska

Re: PowerShell - [решено] PoSH и Excel

Сообщение Iska »

Цитата Ubiquiti:



но проблема в том что он сохраняет в туже папку и предлагает заменить файл
PowerShell - [решено] PoSH и Excel




Используйте просто «.Save()». У Вас же нормально было:


Цитата Ubiquiti:





Код:

Код: Выделить всё

…
$workbook.save()
…

PowerShell - [решено] PoSH и Excel





Цитата Ubiquiti:



где посмотреть параметры к примеру перевернуть страницу
PowerShell - [решено] PoSH и Excel




В описании объектной модели Excel.



Самое простое — запишите макрос потребных действий. Затем откройте модуль с записанным текстом макроса. Найдите потребное место — метод или свойство. В данном случае это может выглядеть так:



Скрытый текст

[spoiler]Изображение[/spoiler]




Стать курсором на этот метод/свойство и нажать F1.




Цитата Ubiquiti:



и почему то в диспетчере задач остаются excel.exe файлы по 6Мб
PowerShell - [решено] PoSH и Excel




Особенности работы с Automation со стороны PowerShell по отношению к Excel. Похожая проблема наблюдалась и в WSH JScript (куда в конце концов добавили отдельный метод под это дело). Более опытные коллеги подскажут, как после «.Quit()» «сказать» сборщику мусора PowerShell, что можно освободить память от этого объекта. Я практически не работаю с PowerShell и очень слабо его знаю.




Цитата Ubiquiti:



через командную строку
PowerShell - [решено] PoSH и Excel




Это не командная строка, это Automation (
OLE Automation - Wikipedia, the free encyclopedia
).
Аватара пользователя
Ubiquiti

Re: PowerShell - [решено] PoSH и Excel

Сообщение Ubiquiti »

Окончательный вариант





Код:

Код: Выделить всё

$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()
Аватара пользователя
Iska

Re: PowerShell - [решено] PoSH и Excel

Сообщение Iska »

Цитата Ubiquiti:



# сохраняем $excel.ActiveWorkbook.Save($file)
PowerShell - [решено] PoSH и Excel




Просто «.Save()», без «$file». Он всё равно игнорируется (даже если не сообщает об ошибке):
Workbook.Save Method (Excel)
.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»