Я работаю над сценарием для 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Можно ли заставить объект сравнения возвращать только изменения или мне нужно обрабатывать вывод позже?