Select Excel 行 --> 从条目创建哈希表
Select Excel row --> Create Hashtable from Entries
我有一个 Excel .xlsx 文件,如下所示:
现在我想创建一个 PowerShell 脚本,它可以执行以下操作:
- 询问用户他想使用哪一行(例如4)
- 用这些条目创建哈希表
哈希表应如下所示:
Name Value
---- -----
Name Jane Doe
Age 67
Street Grace St. 19
Zipcode 12345
Date 03.03.2013
有人知道我该怎么做吗?
另外:这实际上可以通过 xlsx 文件实现还是我需要使用 CSV 文件?
首先,如果我们将 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()
我建议使用 ID 而不是行号:
$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 }
更直观的方法是
- 直接用Import-Excel module读取excel文件
- 将其通过管道传输到
Out-Gridview
,select 一行
- 并填充哈希表
$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
示例输出:
> $HashTable
Name Value
---- -----
Name Molly Johnson
Agr 35
Street Murraay St. 86
Zipcode 54321
Date 02.02.2009
我有一个 Excel .xlsx 文件,如下所示:
现在我想创建一个 PowerShell 脚本,它可以执行以下操作:
- 询问用户他想使用哪一行(例如4)
- 用这些条目创建哈希表
哈希表应如下所示:
Name Value ---- ----- Name Jane Doe Age 67 Street Grace St. 19 Zipcode 12345 Date 03.03.2013
有人知道我该怎么做吗?
另外:这实际上可以通过 xlsx 文件实现还是我需要使用 CSV 文件?
首先,如果我们将 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()
我建议使用 ID 而不是行号:
$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 }
更直观的方法是
- 直接用Import-Excel module读取excel文件
- 将其通过管道传输到
Out-Gridview
,select 一行 - 并填充哈希表
$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
示例输出:
> $HashTable
Name Value
---- -----
Name Molly Johnson
Agr 35
Street Murraay St. 86
Zipcode 54321
Date 02.02.2009