|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - PowerShell и Excel |
|
|
PowerShell - PowerShell и Excel
|
Старожил Сообщения: 173 |
Добрый день
Необходимо в консоль выводить информацию из файла excel Файл Excel это вроде базы. Каждая строка это один элемент данных. Данные об компьютере или сотруднике. Необходимо, чтобы при наборе в консоли например имени - Иванов Скрипт проходил по строкам листа - находил Иванов и отображал определенные ячейки b22, c22, k22 (это как пример, пусть это будет мобильный телефон, рабочий, адрес) Евгений |
|
Отправлено: 16:54, 05-05-2011 |
Разный Сообщения: 1294
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать |
Отправлено: 05:19, 06-05-2011 | #3 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать согласен, нехорошо
но как отлавливать нужный процесс? а то, если его не kill он останется висеть в памяти |
Отправлено: 05:28, 06-05-2011 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата ferget:
не достаточно? |
|
Отправлено: 10:29, 06-05-2011 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 11:00, 06-05-2011 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать amel27, спасибо за уточнение. Если я правильно понял, то это особенность работы враппера .Net для COM-объектов, специфичная для некоторых COM-объектов? Или для любых COM-объектов, вызываемых в PoSH?
Ещё один вопрос: будет ли завершён процесс Excel при завершении скрипта/сессии PoSH (без использованного в #5 кода) или так и останется «висеть» в памяти? |
Отправлено: 13:30, 06-05-2011 | #8 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать Цитата Iska:
я тут проверил и оказалось, что достаточно только quit, просто процесс excel завершается через некоторое время, первый запуск 10, затем время увеличивается до минут, и если запущен другой процесс excel, то не завершается до его завершения |
|
Отправлено: 14:57, 06-05-2011 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Я к чему спрашиваю: в WSH JScript была похожая [внешне] ситуация: HTA javascript: Как правильно закрыть Excel?, но там, при завершении процесса скрипта, процессы Excel закрывались. Оттого хотел узнать, закроются ли здесь процессы Excel при закрытии скрипта/сессии PoSH.
|
Отправлено: 15:27, 06-05-2011 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|