Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PoSH и Excel

Ответить
Настройки темы
PowerShell - [решено] PoSH и Excel

Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:45, 13-01-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата:
Код: Выделить весь код
$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
Не проверялось.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:22, 13-01-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
$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, 13-01-2016 в 19:14.


Отправлено: 18:41, 13-01-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата 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).

Отправлено: 23:07, 13-01-2016 | #4


Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
$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()

Отправлено: 06:30, 14-01-2016 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:28, 14-01-2016 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PoSH и Excel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Архивирование PoSH Ubiquiti Скриптовые языки администрирования Windows 8 24-07-2015 19:01
PowerShell - [решено] агрументы и параметры в сценариях PoSh Shkutu Скриптовые языки администрирования Windows 3 03-10-2013 13:45
2008 R2 - [решено] posh: set-aduser -name? nokogerra Windows Server 2008/2008 R2 6 01-10-2013 09:56
PowerShell - Поиск в Excel средствами PoSh Andrey111sk Скриптовые языки администрирования Windows 1 10-07-2013 00:08
[решено] WSH PoSH Ragnazar Хочу все знать 6 14-05-2012 14:11




 
Переход