Сравнение всех свойств PSCustomObjects (данные листа Excel) - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю над сценарием для PowerShell, чтобы импортировать данные из 2 отдельных листов Excel, сравнить все свойства этих листов и экспортировать новый лист Excel с этим выводом.Цель этого сценария - сравнить обновленную таблицу Excel с предыдущей версией и определить, что изменилось, что было добавлено и, возможно, даже что было удалено.

Я использовал модуль Import-Excel дляобработать первую часть и Compare-Object для сравнения данных.Насколько я могу сказать, Import-Excel импортирует данные Excel в System.Object, который является хеш-таблицей PSCustomObjects.Каждый объект PSCustomObject соответствует строке в листе Excel.

Я выполняю следующий код:

$global:InputdataA = Import-Excel -Path $InputA -WorkSheetname $InputSheetA
$global:InputdataB = Import-Excel -Path $InputB -WorkSheetname $InputSheetB
$global:ReferenceObject = $InputdataA
$global:DifferenceObject = $InputdataB

$global:InputdataHeadersA = $InputdataA[0].psobject.properties.name
$global:InputdataHeadersB = $InputdataB[0].psobject.properties.name

$props = $InputdataHeadersA
$props += $InputdataHeadersB
$props = $props | Select -Unique

$compareResult = Compare-Object -ReferenceObject $ReferenceObject -DifferenceObject $DifferenceObject -Property $props -PassThru -CaseSensitive

Я использую 2 файла Excel для тестирования:

Personnel_16_12_2018 - small2.xlsx (предыдущая версия) Personnel_28_11_2018 - small2.xlsx (новая версия с изменениями и дополнениями)

Файлы можно скачать здесь:

https://ufile.io/bmstu https://ufile.io/3z62x


Вывод, который я хотел бы видеть, будет содержать только 7 записей, которые были изменены / добавлены, с данными из разностного объекта (новая версия листа Excel). Это будет представлять самую последнюю и"правильные" данные.

В настоящее время я получаю вывод из объекта сравнения, содержащий 7 записей И 6 записей, которые были изменены из эталонного объекта, включая боковой индикатор.

IsМожно ли заставить объект сравнения возвращать только изменения или мне нужно обрабатывать вывод позже?

1 Ответ

0 голосов
/ 11 декабря 2018

На основании вашей дополнительной информации и примеров файлов вы можете попробовать что-то вроде этого:

$oldFile = Import-Excel ".\personnel_28_11_2018---small2.xlsx"
$newFile = Import-Excel ".\personnel_16_12_2018---small2.xlsx"

$properties = "TRIAL_PK", "TRIALCOUNTRY_PK", "TRIALSSITE_PK", "ASSIGNMENT_LVL", "ROLE", "INT_EXT", "START_DATA", "END_DATE", "PERSONNELL_PK", "TITLE", "LAST_NAME", "FIRST_NAME", "ORGANIZATION_NAME"

$result = Compare-Object -ReferenceObject $oldFile -DifferenceObject $newFile -Property $properties -PassThru -CaseSensitive | Where-Object {$_.SideIndicator -eq "=>"}

$result | Select-Object $properties | Export-Excel ".\changed.xlsx"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...