使用Powershell或Excel的复杂转置表

时间:2017-07-20 19:44:19

标签: excel powershell

我试图操纵文件共享报告的布局。基本上现在的布局是这样的:

Path,Username/Group
path1,user1
path2,user1
path3,user1
path1,user2
path3,group1
path2,group2

它显示了文件夹路径以及用户有权访问它们的内容。 我想将其更改为以下布局:

user1,user2,group1,group2
path1,path1,path3,path2
path2
path3

无论是将数据导入excel还是在excel中操作它还是使用PowerShell脚本来操作数据,我都不太清楚如何按照我想要的方式来实现它。

我尝试将此文本文件导入excel并尝试转置,但我无法弄清楚如何为每个用户显示文件路径列表。我也在Access中弄乱了它,但我在访问中没有足够的经验来让它正常显示。我在powershell中尝试了一些东西,但它相当于一组以每个文档中的文件路径列表的用户命名的文本文档。不幸的是,我并不喜欢它。

1 个答案:

答案 0 :(得分:1)

PowerShell可以做到。假设数据是您在问题中显示的内容,它看起来像一个CSV文件。你可以这样做:

$DataIn = Import-CSV $file
$HTOut = @{}
$File | Group 'Username/Group' | ForEach{$HTOut.add($_.Name,$_.Group.Path)}
New-Object PSObject -Prop $HTOut | Export-CSV $file

我想到了,这并没有完全按照我所说的做,它会使一个对象具有每个用户/组的属性,并且该属性的值将是所有路径对于那个人/团体。你真正想要的是迭代所有这些路径的X对象。为此,前3行保持不变,除了我们捕获具有最多路径的用户/组的路径数。然后我们让许多对象遍历每个用户的路径。

$DataIn = Import-CSV $file
$HTOut = @{}
$MaxPaths = $DataIn | Group 'Username/Group' | ForEach{$HTOut.add($_.Name,$_.Group.Path);$_} |% Count |Sort -Descend |Select -first 1
$Results = For($i=0;$i -le $MaxPaths;$i++){
    $Record = New-Object PSObject
    $HTOut.Keys|ForEach{Add-Member -InputObject $Record -NotePropertyName $_ -NotePropertyValue $(([array]$HTOut["$_"])[$i])}
    $Record
}