Подсчет столбцов импортированной книги Excel - подсчет свойств данного объекта - PullRequest
3 голосов
/ 17 марта 2019

Я импортировал лист 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 ]

2 голосов
/ 18 марта 2019

ТЛ; др

@($columns.psobject.properties).Count

То, что вы ищете, - это число свойств объекта , которое можно сделать с помощью .psobject.properties collection , то есть доступно для любого объекта в PowerShell - и, следовательно, также для [pscustomobject] экземпляров, возвращаемых Import-Excel - в качестве отражения , которое позволяет вам проверять данный объект свойства.

Подсчет свойств сложен , потому что определенный тип данных коллекции, возвращаемый .psobject.properties - [System.Management.Automation.PSMemberInfoIntegratingCollection[System.Management.Automation.PSPropertyInfo]] - неожиданно не реализует ни .Count или .Length свойство .

Обходной путь заключается в использовании @(...), оператора подвыражения массива, для сбора отдельных свойств в виде обычного массива PowerShell ([object[]]), на котором вы затем можете Звоните .Count:

@($columns.psobject.properties).Count

См. эту проблему GitHub , которая требует, чтобы свойство .Count было реализовано в коллекции, возвращаемой .psobject.properties, чтобы сделать этот обходной путь ненужным.

1 голос
/ 17 марта 2019

Кажется, это было сделано.

$columns = (($columns[0].psobject.properties).Count).Count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...