使用Powershell,如何对excel列中的值求和并按另一个变量的值排序?
我正在尝试将Excel电子表格中的数据导入Powershell脚本,并根据另一列的值对结果进行排序,同时将一列的值相加。下面的例子可能比我的文字更能说明这一点 最终目标是将每个代理的“提交”列中的值相加,然后将数据导出到单独的电子表格中,但我不知道将这些值相加并与代理进行分组的第一步是什么使用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
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'`