1

我正在尝试将 Excel 电子表格中的数据导入到 Powershell 脚本中,并将一列的值相加,同时根据另一列的值对结果进行排序。下面的例子可能比我用文字更能说明这一点。

最终目标是将每个代理的 SUBMIT 列中的值相加,然后将该数据导出到单独的电子表格,但我无法弄清楚将这些值相加并与代理进行分组的第一步。

foreach ($data in (Import-Excel "C:\prod\actstest.xlsx")) {
    $result += $data.Submit
}

Write-Host $result

当我运行上面的代码块时,它成功地将 Submit 列中的值相加,但不会根据 Agent 对其进行排序。当我运行下面的代码时,它成功地按代理对它们进行了排序,但没有将它们加起来。必须有一种方法可以将它们结合在一起,但到目前为止我还没有成功。

$testdata = Import-Excel "C:\prod\actstest.xlsx"

ForEach ($Agency in $testdata) {

    $AgentID = $Agency.AGENT 
    $Product = $Agency.EPROD
    $Submit = $Agency.SUBMIT

    [int]$SubNum = [convert]::ToInt32($Submit, 10)

        ForEach($AgentID in $Agency) {

            If ($Product -eq "HOP") {

                $Agency | Group-Object AGENT | %{
                New-Object psobject -Property @{
                Agent = $_.Name
                Sum = ($_.Group |  Measure-Object -property SUBMIT -Sum).Sum

                }

            }

        }

    }

}

这就是我得到的:

Sum Agent 
--- ----- 
  2 05007
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05008
  1 05018
  1 05018
  1 05018
  1 05018
  1 05018

这就是我想要得到的:

Sum Agent 
--- ----- 
  2 05007
 13 05008
  5 05018
4

2 回答 2

0

由于我没有您的原始文件并且无法真正开始完全理解您要完成的工作,因此我只能提供一种汇总方法。我创建了自己的代理数组来展示它是如何工作的:

$agents = @(05007,05007,05008,05007,05008,05009,05018,05008,05009,05017,05009)
$agentsSorted = $agents | sort
$uniqueAgents = $agentsSorted | get-unique

$data = foreach ($uniqueAgent in $uniqueAgents) {
$count = 0
$count = $agentssorted.where({$_ -eq $uniqueAgent}).count
$obj = [pscustomobject]@{Agent = $uniqueAgent; Sum = $count}
$obj
}

$data
于 2019-02-07T16:13:51.570 回答
0

在没有看到原始数据的情况下很难推断出你想要什么。

这可能会:

## Q:\Test\2019\02\07\SO_54576574.ps1
$testdata = Import-Excel "C:\prod\actstest.xlsx"

$testdata | Where-Object EPROD -eq 'HOP' | Group-Object Agent | ForEach-Object {
    [PSCustomObject]@{
        Agent = $_.Name
        Sum   = ($_.Group | Measure-Object -Property SUBMIT -Sum).Sum
    }
}
于 2019-02-07T17:21:31.043 回答