【问题标题】:Select Excel row --> Create Hashtable from Entries选择 Excel 行 --> 从条目创建哈希表
【发布时间】:2019-03-28 22:37:42
【问题描述】:

我有一个 Excel .xlsx 文件,如下所示:


现在我想创建一个 PowerShell 脚本,它可以执行以下操作:

  1. 询问用户他想使用哪一行(例如4
  2. 使用这些条目创建一个哈希表

哈希表应如下所示:

名称 值 ---- ----- 简·多伊的名字 67 岁 格雷斯街 19 号 邮政编码 12345 日期 03.03.2013

有人知道我如何做到这一点吗?

另外:这实际上可以通过 xlsx 文件实现,还是我需要使用 CSV 文件?

【问题讨论】:

  • 最简单的方法是使用 CSV。然后你可以使用Import-CsvOut-GridView 使用户交互变得非常容易。

标签: excel powershell csv hashtable xlsx


【解决方案1】:

首先,如果我们将 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 }

【讨论】:

    【解决方案2】:

    更直观的方法是

    • 直接用Import-Excel module读取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
    

    样本输出:

    > $HashTable
    
    Name                           Value
    ----                           -----
    Name                           Molly Johnson
    Agr                            35
    Street                         Murraay St. 86
    Zipcode                        54321
    Date                           02.02.2009
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多