首页 > 解决方案 > 计算导入的 Excel 工作簿的列数 - 计算给定对象的属性

问题描述

我已使用此模块将 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

没有任何效果,请有任何想法。

标签: powershellreflection

解决方案


tl;博士

@($columns.psobject.properties).Count

您正在寻找的是对象属性的计数,这可以通过.psobject.properties集合来完成,该集合可用于PowerShell中的任何对象 - 因此也可用于[pscustomobject]返回的实例Import-Excel- 作为允许您检查的反射功能给定对象的属性。

对属性进行计数很棘手,因为-意外返回的特定集合数据类型.psobject.properties既不实现 a也不实现属性[System.Management.Automation.PSMemberInfoIntegratingCollection[System.Management.Automation.PSPropertyInfo]].Count.Length

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

@($columns.psobject.properties).Count

请参阅此 GitHub 问题,该问题要求.Count在返回的集合上实现一个属性,.psobject.properties以使这种解决方法变得不必要。


推荐阅读