Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] PoSH и Excel (http://forum.oszone.net/showthread.php?t=310320)

Ubiquiti 13-01-2016 16:45 2594380

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()


Iska 13-01-2016 17:22 2594395

Цитата:

Код:

$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 13-01-2016 18:41 2594428

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

Код:

$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 13-01-2016 23:07 2594542

Цитата:

Цитата Ubiquiti
но проблема в том что он сохраняет в туже папку и предлагает заменить файл »

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

Цитата Ubiquiti
Код:


$workbook.save()

»

Цитата:

Цитата Ubiquiti
где посмотреть параметры к примеру перевернуть страницу »

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

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

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

Цитата:

Цитата Ubiquiti
и почему то в диспетчере задач остаются excel.exe файлы по 6Мб »

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

Цитата:

Цитата Ubiquiti
через командную строку »

Это не командная строка, это Automation (OLE Automation - Wikipedia, the free encyclopedia).

Ubiquiti 14-01-2016 06:30 2594627

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

Код:

$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 14-01-2016 11:28 2594708

Цитата:

Цитата Ubiquiti
# сохраняем $excel.ActiveWorkbook.Save($file) »

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


Время: 13:58.

Время: 13:58.
© OSzone.net 2001-