/ / Додавання декількох полів стовпців до зведеної таблиці з Powershell - excel, vba, excel-vba, powershell, excel-interop

Додавання декількох стовпців до PivotTable з Powershell - excel, vba, excel-vba, powershell, excel-interop

У мене виникають проблеми з додаванням декількох полів стовпців до PivotTable в Excel за допомогою Powershell. Записаний макрос VBA працює нормально, але як тільки переписаний на Powershell, з'являються тонкі помилки.

У мене є три стовпці: ідентифікатор, ім'я та група. Я хочу, щоб ідентифікатори та імена були групами стовпців, а група - групуванням рядків.

Це можна виконати в інтерфейсі Excel без будь-яких проблем або помилок. Записаний макрос:

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Name")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("ID")
.Orientation = xlColumnField
.Position = 2
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Group")
.Orientation = xlRowField
.Position = 1
End With

Записаний макрос працює і працює відмінно. Тепер мені потрібно скопіювати цей код у Powershell для автоматизованої роботи. Ось "Powershell", яку я написав:

$pt.PivotFields("Name").Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField
$pt.PivotFields("Name").Position = 1
$pt.PivotFields("ID").Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField
$pt.PivotFields("ID").Position = 2
$pt.PivotFields("Group").Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlRowField
$pt.PivotFields("Group").Position = 1

Хоча код ідентичний, результатине. За допомогою макросу VBA зведена таблиця закінчується назвою та ідентифікатором як поля стовпців, а група - полем рядка. За допомогою сценарію Powershell полем стовпця буде створено лише ім'я. Ідентифікатор не робиться полем стовпця. Група все ще стає полем рядка.

Будь-які ідеї? Я також спробував використовувати цей підхід з іншим методом API:

$pt.AddFields("Group", [array]("Name","ID"))

Це дає той самий результат.

Відповіді:

0 для відповіді № 1

Я вирішив проблему, додавши поля рядків і стовпців після додавання поля даних наступним чином:

$pt.AddDataField($pt.PivotFields("Group"))
$pt.PivotFields("Name").Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField
$pt.PivotFields("Name").Position = 1
$pt.PivotFields("ID").Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField
$pt.PivotFields("ID").Position = 2
$pt.PivotFields("Group").Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlRowField
$pt.PivotFields("Group").Position = 1

Це працює. Я не бачив цього ніде в документації, так що я сподіваюся, що це допоможе комусь таким, як я.