2013-06-21 4 views
0

i'am stuck coding with below requirements.код powershell для сравнения двух файлов xls

У меня есть два файла excel (xls) (старый и новый список пользователей). В каждом файле есть 4 поля «Userid», «UserName», «Costcenter», Approving Manager ». Теперь мне нужно проверить, существует ли каждый пользовательский список из нового списка пользователей в списке старых пользователей. Если это так, мне нужно скопировать/замените значения «Costcenter» и «Утверждающий менеджер» в списке «Новый пользователь» со значениями из тех же столбцов из списка «Старый пользователь». Если это условие терпит неудачу, запустите всю строку для «userid» в списке новых пользователей, для которой нет соответствующей записи соответствия в списке «Старый пользователь» и, наконец, не последняя, ​​но в последнюю очередь нам нужно сохранить новый список пользователей. Есть около 2000+ userid

ниже, я начал кодирование, чтобы получить список Userid из нового списка пользователей в массив. будет делать то же самое для старого списка пользователей. Оттуда, как мне перейти, изменив новый список пользователей, как я объяснил выше?

$objExcel = new-object -comobject excel.application 
$UserWorkBook = $objExcel.Workbooks.Open("O:\UserCert\New_Users.xls") 
$UserWorksheet = $UserWorkBook.Worksheets.Item(1) 
$OldUsers = @() 
$intRow = 2 #starting from 2 since i have to exclude the header 

do { 
$OldUsers = $UserWorksheet.Cells.Item($intRow, 1).Value() 
$intRow++ 
} while ($UserWorksheet.Cells.Item($intRow,1).Value() -ne $null) 

Любая помощь с благодарностью ...

+1

Вместо того, чтобы испортить интерфейс Excel COM, я бы сохранил файлы в формате CSV. Обработка CSV в Powershell - это легкий ветерок, посмотрите на «Import-CSV». – vonPryz

+0

Вы все равно можете использовать объект COM Excel для сохранения файлов в формате CSV. –

ответ

0

Если UserIds в каждом списке в некотором типе обычном порядке, то это должно быть легко открывать обе книги в то же самое время, поддерживать 2 указатели (Row_for_old_userlist и Row_for_new_userlist) и сравните содержимое нового идентификатора пользователя со старым.

Если они не имеют какого-либо видимого порядка, то для каждого элемента в новом списке пользователей вам нужно будет отсканировать весь старый список пользователей, чтобы найти их, а затем предпринять действия.

Я не уверен, что сохранение в CSV является действительным подходом к вашим требованиям - вы не сможете получить данные таким образом.

Однако ... думаю вы действительно спрашиваете, как установить значение ячейки электронной таблицы Excel.

Если это так, вот какой код я использую для вставки списка дефектов в электронную таблицу ... и затем установите столбец последней ячейки А в другой цвет. Как ни странно, эта часть «value2» ... не подлежит обсуждению. Не спрашивайте меня, почему это «value2», но это так.

for ($x=0; $x -lt $defects.count; $x++) 
    { 
    $row++ 
    [string] $ENGIssue = $defects[$x] 
    $sheet.Cells.Item($row,1).value2 = $ENGIssue 
    } 
$range = $sheet.range(("A{0}" -f $row), ("B{0}" -f $row)) 
$range.select() | Out-Null 
$range.Interior.ColorIndex=6