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

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

Ответить
Настройки темы
PowerShell - PowerShell и Excel

Старожил


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

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


Добрый день

Необходимо в консоль выводить информацию из файла excel
Файл Excel это вроде базы. Каждая строка это один элемент данных. Данные об компьютере или сотруднике.
Необходимо, чтобы при наборе в консоли например имени - Иванов
Скрипт проходил по строкам листа - находил Иванов и отображал определенные ячейки b22, c22, k22 (это как пример, пусть это будет мобильный телефон, рабочий, адрес)


Евгений

Отправлено: 16:54, 05-05-2011

 

Аватара для ferget

Разный


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

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


примерно так
Код: Выделить весь код
cls

function seach ($x){
$File = "D:\1.xlsx"

$Excel = New-Object -ComObject Excel.Application
$xlprocess = Get-Process excel 
$Excel.visible = $false
$Workbook = $Excel.workbooks.open($file)
$Worksheets = $Workbooks.worksheets
$Worksheet = $Workbook.Worksheets.Item(1)

$SearchString = $x

$Range = $Worksheet.Range("A1").EntireColumn
$Search = $Range.find($SearchString)

$a=$Search.Row
$name=$Search.Value()
$data1= $Worksheet.Cells.Item($a,3).Text
$data2= $Worksheet.Cells.Item($a,5).Text
Write-Host "Имя: " $name   "Данное1: " $data1 "Данное2: " $data2
$Excel.quit()
$xlprocess | kill }
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:14, 06-05-2011 | #2



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

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


Ветеран


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

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


ferget,
Код: Выделить весь код
$xlprocess = Get-Process excel 
…
$xlprocess | kill
на всякий случай? А если у меня уже были открыты экземпляры Microsoft Excel? Нехорошо.

Отправлено: 05:19, 06-05-2011 | #3


Аватара для ferget

Разный


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

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


согласен, нехорошо
но как отлавливать нужный процесс?
а то, если его не kill он останется висеть в памяти

Отправлено: 05:28, 06-05-2011 | #4


Googler


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

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


Цитата ferget:
он останется висеть в памяти »
тогда так:
Код: Выделить весь код
$string = "Иванов"
$file = "D:\1.xlsx"

$ciBK = [System.Threading.Thread]::CurrentThread.CurrentCulture
$ciUS = [System.Globalization.CultureInfo]'en-US'
[System.Threading.Thread]::CurrentThread.CurrentCulture = $ciUS

$xl = New-Object -COM Excel.Application
$xl.Visible = $False

$bk = $xl.Workbooks.PSBase.GetType().InvokeMember('Open',[Reflection.BindingFlags]::InvokeMethod,$null,$xl.Workbooks,"$file",$ci)
$ws = $bk.Worksheets.Item(1)
$rn = $ws.Range("A1").EntireColumn

$sc = $bk.PSBase.GetType().InvokeMember('Find',[Reflection.BindingFlags]::InvokeMethod,$null,$rn,$string,$ci)

$v0= $ws.Cells.Item($sc.Row,1).FormulaLocal
$v1= $ws.Cells.Item($sc.Row,3).FormulaLocal
$v2= $ws.Cells.Item($sc.Row,5).FormulaLocal

Write-Host "Имя: " $v0   "Данное1: " $v1 "Данное2: " $v2

$bk.PSBase.GetType().InvokeMember('Close',[Reflection.BindingFlags]::InvokeMethod,$null,$bk,"",$ci)
$xl.Quit()

[System.Threading.Thread]::CurrentThread.CurrentCulture = $ciBK

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sc)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($rn)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ws)
Ссылки по теме:

How Can I Use Windows PowerShell to Automate Microsoft Excel?
BUG: "Old format or invalid type library" error when automating Excel
Getting Rid of a COM Object (Once and For All)
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:08, 06-05-2011 | #5


Ветеран


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

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


Цитата ferget:
а то, если его не kill он останется висеть в памяти »
Это как,
Код: Выделить весь код
$Excel.quit()
не достаточно?

Отправлено: 10:29, 06-05-2011 | #6


Googler


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

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


Цитата Iska:
$Excel.quit()
не достаточно? »
по последней ссылке как раз "про это" )

Отправлено: 11:00, 06-05-2011 | #7


Ветеран


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

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


amel27, спасибо за уточнение. Если я правильно понял, то это особенность работы враппера .Net для COM-объектов, специфичная для некоторых COM-объектов? Или для любых COM-объектов, вызываемых в PoSH?

Ещё один вопрос: будет ли завершён процесс Excel при завершении скрипта/сессии PoSH (без использованного в #5 кода) или так и останется «висеть» в памяти?

Отправлено: 13:30, 06-05-2011 | #8


Аватара для ferget

Разный


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

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


Цитата Iska:
Ещё один вопрос: будет ли завершён процесс Excel при завершении скрипта/сессии PoSH (без использованного в #5 кода) или так и останется «висеть» в памяти? »
будут завершены все процессы Excel (если использовать только Quit, то при каждом зауске будет создаваться новый процесс)

я тут проверил и оказалось, что достаточно только quit, просто процесс excel завершается через некоторое время, первый запуск 10, затем время увеличивается до минут, и если запущен другой процесс excel, то не завершается до его завершения

Отправлено: 14:57, 06-05-2011 | #9


Ветеран


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

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


Я к чему спрашиваю: в WSH JScript была похожая [внешне] ситуация: HTA javascript: Как правильно закрыть Excel?, но там, при завершении процесса скрипта, процессы Excel закрывались. Оттого хотел узнать, закроются ли здесь процессы Excel при закрытии скрипта/сессии PoSH.

Отправлено: 15:27, 06-05-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - Помогите написать макрос в Excel, экспорт данных из Excel в Word. E.v.g Программирование и базы данных 7 03-05-2018 22:18
Система - Windows PowerShell shoot Программное обеспечение Windows 13 27-11-2011 02:23
Вопрос - applocker powershell extorhost Защита компьютерных систем 0 12-08-2010 17:16
2007 - Excel | Вычисление времени в Excel Vowan Microsoft Office (Word, Excel, Outlook и т.д.) 1 01-02-2010 17:09
Разное - PowerShell Butunin Klim Программирование и базы данных 1 31-07-2008 18:39




 
Переход