Используя Powershell, как я могу суммировать значения в столбце Excel и сортировать по значению другой переменной? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь импортировать данные из электронной таблицы Excel в скрипт Powershell и суммировать значения одного столбца при сортировке результатов на основе значения другого столбца.Пример ниже, вероятно, иллюстрирует это лучше, чем я, на словах.

Конечная цель - сложить значения в столбце SUBMIT для каждого агента и затем экспортировать эти данные в отдельную электронную таблицу, но я не могувыяснить первый шаг сложения значений и группировки их с помощью агента.

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

Write-Host $result

Когда я запускаю приведенный выше блок кода, он успешно складывает значения в столбце «Отправить», но не сортируетэто основано на агенте.Когда я запускаю приведенный ниже код, он успешно сортирует их по агенту, но не добавляет их.Должен быть способ объединить их вместе, но мне не удалось выяснить это до этого момента.

$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

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Довольно сложно определить, что вы ищете, не видя исходных данных.

Это может сделать:

## 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
    }
}
0 голосов
/ 07 февраля 2019

Поскольку у меня нет вашего исходного файла, и я не могу полностью понять, что вы пытаетесь выполнить, я могу только предоставить способ суммирования.Я создал свой собственный массив агентов, чтобы показать, как он работает:

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...