Невозможно создать двустороннюю таблицу в excel из powershell - PullRequest
1 голос
/ 15 апреля 2020

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

class sampleClass {
    [String] $var1
    [String] $var2
    [Bool] $boolVar

    sampleClass([String] $var1, [String] $var2, [Bool] $boolVar)
    {
        $this.var1 = $var1
        $this.var2 = $var2
        $this.boolVar = $boolVar
    }

    [String] ToString()
    {
        return $this.var1 + ": " + $this.var2 + ": " + $this.boolVar
    }
}

$s1 = [sampleClass]::new("Comp1", "S1", $false)
$s2 = [sampleClass]::new("Comp2", "S2", $true)
$s3 = [sampleClass]::new("Comp1", "S2", $false)
$s4 = [sampleClass]::new("Comp2", "S1", $false)

$s = @()
$s += $s1
$s += $s2    
$s += $s3
$s += $s4
$s | Export-Csv .\out.csv -NoTypeInformation

Вывод кода выше приведен ниже:

enter image description here

Но вывод, который Я хочу не это, а как показано ниже:

enter image description here

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 апреля 2020

Этот код может быть вашей лучшей ставкой:

function Transpose-Object
{ [CmdletBinding()]
  Param([OBJECT][Parameter(ValueFromPipeline = $TRUE)]$InputObject)

  BEGIN
  { # initialize variables just to be "clean"
    $Props = @()
    $PropNames = @()
    $InstanceNames = @()
  }

  PROCESS
  {
    if ($Props.Length -eq 0)
    { # when first object in pipeline arrives retrieve its property names
            $PropNames = $InputObject.PSObject.Properties | Select-Object -ExpandProperty Name
            # and create a PSCustomobject in an array for each property
            $InputObject.PSObject.Properties | %{ $Props += New-Object -TypeName PSObject -Property @{Property = $_.Name} }
        }

        if ($InputObject.Name)
        { # does object have a "Name" property?
            $Property = $InputObject.Name
        } else { # no, take object itself as property name
            $Property = $InputObject | Out-String
        }

        if ($InstanceNames -contains $Property)
        { # does multiple occurence of name exist?
        $COUNTER = 0
            do { # yes, append a number in brackets to name
                $COUNTER++
                $Property = "$($InputObject.Name) ({0})" -f $COUNTER
            } while ($InstanceNames -contains $Property)
        }
        # add current name to name list for next name check
        $InstanceNames += $Property

    # retrieve property values and add them to the property's PSCustomobject
    $COUNTER = 0
    $PropNames | %{
        if ($InputObject.($_))
        { # property exists for current object
            $Props[$COUNTER] | Add-Member -Name $Property -Type NoteProperty -Value $InputObject.($_)
        } else { # property does not exist for current object, add $NULL value
            $Props[$COUNTER] | Add-Member -Name $Property -Type NoteProperty -Value $NULL
        }
            $COUNTER++
    }
  }

  END
  {
    # return collection of PSCustomobjects with property values
    $Props
  }
}

Это позволит вам превратить столбцы в строки и затем экспортировать объект. Используйте как это:

$s | Transpose-Object | Export-Csv .\out.csv -NoTypeInformation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...