У мене виникають проблеми з додаванням декількох полів стовпців до 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
Це працює. Я не бачив цього ніде в документації, так що я сподіваюся, що це допоможе комусь таким, як я.