使用Powershell,如何对excel列中的值求和并按另一个变量的值排序?

使用Powershell,如何对excel列中的值求和并按另一个变量的值排序?,excel,powershell,sum,Excel,Powershell,Sum,我正在尝试将Excel电子表格中的数据导入Powershell脚本,并根据另一列的值对结果进行排序,同时将一列的值相加。下面的例子可能比我的文字更能说明这一点 最终目标是将每个代理的“提交”列中的值相加,然后将数据导出到单独的电子表格中,但我不知道将这些值相加并与代理进行分组的第一步是什么 foreach ($data in (Import-Excel "C:\prod\actstest.xlsx")) { $result += $data.Submit } Write-Host $r

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

最终目标是将每个代理的“提交”列中的值相加,然后将数据导出到单独的电子表格中,但我不知道将这些值相加并与代理进行分组的第一步是什么

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

Write-Host $result
当我运行上面的代码块时,它成功地将Submit列中的值相加,但不会根据代理对其排序。当我运行下面的代码时,它成功地按代理对它们进行了排序,但没有将它们相加。一定有办法把这些结合在一起,但到目前为止,我还没有弄清楚

$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

由于我没有您的原始文件,也无法真正开始完全理解您试图完成的任务,因此我只能提供一种方法来进行汇总。我创建了自己的代理阵列,以展示其工作原理:

$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

由于我没有您的原始文件,也无法真正开始完全理解您试图完成的任务,因此我只能提供一种方法来进行汇总。我创建了自己的代理阵列,以展示其工作原理:

$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

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

这可能会:

## 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
    }
}

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

这可能会:

## 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
    }
}

这不是我想要的,但是谢谢你的提交。我一定会在以后的任何问题中提供我实际数据的一个例子。这不是我想要的,但谢谢你的提交。我一定会在以后的任何问题中提供我实际数据的一个例子。感谢反馈,我刚刚意识到它应该是'Where Object EPROD-eq'HOP''谢谢反馈,我刚刚意识到它应该是'Where Object EPROD-eq'HOP'`