计算导入的Excel工作簿的列-计算给定对象的属性

时间:2019-03-17 13:58:05

标签: powershell reflection

我已使用以下module将Excel工作表导入PowerShell:

我想计算列数,所以我使用了以下功能:

 $columns = @(Import-Excel -Path "D:\Qlik\AccessRules\Roster\RosterTest-Jan.xlsx" -StartRow 1 -EndRow 1 -NoHeader)

现在我认为该数组具有51个键。但是我怎么算呢?无论我尝试什么,我所看到的都是1。

我尝试过:

$columns.Count
$columns.PSObject.BaseObject.Count

什么都行不通,请提出任何想法。

2 个答案:

答案 0 :(得分:2)

tl;博士

@($columns.psobject.properties).Count

您要查找的是对象的 properties 个计数,可以通过 .psobject.properties集合完成,可在PowerShell中的 any 对象上使用-并且因此在[pscustomobject]返回的Import-Excel实例上也可用-作为 reflection < / em>功能,可让您检查给定对象的属性。

计数这些属性非常棘手,因为 .psobject.properties -[System.Management.Automation.PSMemberInfoIntegratingCollection[System.Management.Automation.PSPropertyInfo]]返回的特定集合数据类型-意外地既没有实现.Count也没有实现.Length属性

解决方法是使用数组子表达式运算符@(...) 收集单个属性作为常规PowerShell数组[object[]] ,然后可以在其上致电.Count

@($columns.psobject.properties).Count

请参见this GitHub issue,该文档要求在.Count返回的集合上实现.psobject.properties属性,以使此解决方法变得不必要。

答案 1 :(得分:1)

这似乎已经完成了。

$columns = (($columns[0].psobject.properties).Count).Count