Выберите строку Excel -> Создать Hashtable из записей - PullRequest
0 голосов
/ 24 октября 2018

У меня есть Excel .xlsx-файл, который выглядит следующим образом:

enter image description here


Теперь я хотел бы создать сценарий PowerShell, который может делать следующее:

  1. Спросить пользователя, какую строку он хочет использовать (например, 4 )
  2. Создать хеш-таблицу с этими записями

Хеш-таблица должна выглядеть следующим образом:

Name                 Value
----                 -----
Name                 Jane Doe
Age                  67
Street               Grace St. 19
Zipcode              12345
Date                 03.03.2013

Кто-нибудь знает, как мне этого добиться?

Плюс: Это действительно достижимо с помощью xlsx-файла илимне нужно использовать CSV-файл?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Более интуитивно понятный способ -

  • читать файл Excel напрямую с помощью модуля Import-Excel
  • передать его Out-Gridview, выбратьодна строка
  • и заполнение хеш-таблицы

$HashTable = [ordered]@{}

Import-Excel "x:\path\sample.xls" | Out-GridView -OutputMode Single -Title "Select one line" | 
  ForEach-Object {$_.psobject.properties | ForEach-Object {
    $HashTable[$_.Name]=$_.Value
  }
}
$HashTable

enter image description here

Пример вывода:

> $HashTable

Name                           Value
----                           -----
Name                           Molly Johnson
Agr                            35
Street                         Murraay St. 86
Zipcode                        54321
Date                           02.02.2009
0 голосов
/ 24 октября 2018

Во-первых, это достижимо, если мы конвертируем xls в csv:

$excelFilePath = "C:\Temp\abc.xlsx"
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $false
$Excel.DisplayAlerts = $false
$Workbook = $excel.Workbooks.Open($excelFilePath)

$($Workbook.Worksheets | where {$_.Name -eq "Sheet1"}).SaveAs("C:\Temp\abcd.csv", 6)

$Excel.Quit()

Я бы предложил использовать идентификатор вместо номера строки:

$importedAbcd = Import-Csv -Path "C:\Temp\abcd.csv" -Delimiter ";"

[int]$answer = Read-Host "Select ID to work with"
$object = $importedAbcd | Where-Object {$_.ID -eq $answer}

У вас есть строка сейчаспреобразование его в хеш:

$hash = @{}
$object.psobject.properties | Foreach { $hash[$_.Name] = $_.Value }
...