Показать полную графическую версию : Извлечение информации из Excel с помощью PowerShell
Alexchandr
13-10-2016, 13:41
Добрый день.
Помогите пожалуйста составить скрипт PowerShell который:
1.Открывал заданный файл Excel, содержащий имена и даты.
2.Находил в нем строчки с датой отличающейся от сегодняшней менее чем на 20 дней.
3.Отсылал найденные строчки по электронной почте.
$body = Import-Excel "C:\Users.xlsx" | Where {
$t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM")
$t.Days -gt 0 -and $t.Days -le 20
} | Out-String
if($body)
{
send-mailmessage -from "User01 <user01@example.com>" -to "User02 <user02@example.com>" -subject "Date" -body $body -smtpServer smtp.fabrikam.com
}
Пример файла:
http://i.imgur.com/itjRKBE.jpg
Пример вывода:
Имя Дата
--- ----
Поля 1.11.2000
Модуль: https://github.com/dfinke/ImportExcel
Alexchandr
13-10-2016, 15:17
Спасибо за ответ. Подскажите, а как установить Import-Excel?
Alexchandr
14-10-2016, 16:51
При запуске кода возникает ошибка:
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: (:) [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand
Подскажите, как это можно исправить?
Alexchandr, самым правильным будет, если Вы выложите образец Вашего:
заданный файл Excel, содержащий имена и даты. »
упаковав его в архив.
Alexchandr
18-10-2016, 09:46
Вот сам файл.
Вот сам файл. »
У Вас оба столбца называются «Имя», в примере (http://forum.oszone.net/post-2677728.html#post2677728) же второй столбец имеет название «Дата» (в этом ли дело — не проверялось, попробуйте сами).
Alexchandr
18-10-2016, 10:22
Исправил второй столбец на "Дата".
Ошибка осталась.
PS C:\Users\Alex> $body = Import-Excel "D:\us\user.xlsx" | Where {
>> $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM")
>> $t.Days -gt 0 -and $t.Days -le 20
>> } | Out-String
>>
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: (:) [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: (:) [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: (:) [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: (:) [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
PS > Import-Excel C:\user.xlsx
Имя Дата
--- ----
Маша 01.10.1986 0:00:00
Паша 02.10.1985 0:00:00
Галя 20.06.1999 0:00:00
Валя 05.11.1965 0:00:00
Поля 01.11.2000 0:00:00
$body = Import-Excel "C:\Users.xlsx" | Where {$_.Дата} | Where {
$t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM")
$t.Days -gt 0 -and $t.Days -le 20
} | Out-String
Выводит:
PS > Import-Excel C:\user.xlsx | Where {$_.Дата} | Where {
>> $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM")
>> $t.Days -gt 0 -and $t.Days -le 20
>> } | Out-String
Имя Дата
--- ----
Валя 05.11.1965 0:00:00
Поля 01.11.2000 0:00:00
Если локализациия русская и формат ячеек Дата:
$t = New-TimeSpan (Get-Date).ToString("dd.MM") ($_.Дата.ToString("dd.MM"))
Если локализациия английская и формат ячеек Дата:
$t = New-TimeSpan (Get-Date).ToString("MM.dd") ($_.Дата.ToString("MM.dd"))
Alexchandr
18-10-2016, 13:22
Спасибо большое! Заработало!
Единственное, MS Outlook2010 почему то не отображает русские шрифты.
??? ????
--- ----
???? 05.11.1965 0:00:00
???? 01.11.2000 0:00:00
Еще раз спасибо.
Попробовать указать параметр -Encoding:
send-mailmessage -encoding [System.Text.Encoding]::UTF8
Alexchandr
18-10-2016, 14:57
Выдает ошибку:
>> send-mailmessage -encoding [System.Text.Encoding]::UTF8 -from "user01@example.com" -to "user01@example.com" -subject "Date" -body $body -smtpServer smtp.fabrikam.com
>> }
>>
Send-MailMessage : Не удается привязать параметр "Encoding". Не удается преобразовать значение "[System.Text.Encoding]:
:UTF8" типа "System.String" в тип "System.Text.Encoding".
строка:3 знак:28
+ send-mailmessage -encoding [System.Text.Encoding]::UTF8 -from "user01@e ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SendMailMessage
Alexchandr
18-10-2016, 16:18
С -encoding разобрался.
Но столкнулся с новой проблемой: если имя в таблице длинное, то оно обрезается в почтовом сообщении.
№ Наименование инструкции Дата пересмотра
- ----------------------- ---------------
5 По эксплуатации ПО «Журнал учета пер... 01.11.2016 0:00:00
6 По эксплуатации программного комплек... 02.11.2016 0:00:00
Alexchandr
24-10-2016, 16:07
Спасибо за помощь.
Подскажите, как нибудь можно форматировать ширину столбца, интервал между столбцами в почтовом сообщении?
Хотелось бы увеличить интервал между первым и вторым столбцом, а между вторым и третьим уменьшить.
Входящее сообщение имеет вид (если результат сохранить на сайте, то интервал между 2 и 3 столбцом автоматически сжимается) :
№ Дата пересмотра Наименование инструкции
---- --------------- ---------------------------------
1 28.10.2016 0:00:00 По эксплуатации программы «Автоматизированное рабочее место начальника смены ст...
2 29.10.2016 0:00:00 По эксплуатации программного комплекса «АСУРЭО» начальником смены станции.
3 30.10.2016 0:00:00 По эксплуатации программного комплекса «MODES Terminal» начальником смены станции.
4 31.10.2016 0:00:00 по эксплуатации автоматизированной системы оперативного мониторинга топливообес...
5 01.11.2016 0:00:00 По эксплуатации ПО «Журнал учета переводов присоединений на обходные выключател...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.