2013-06-21 33 views
0

i'am卡住了以下要求的編碼。用於比較兩個xls文件的powershell代碼

我有兩個excel(xls)文件(舊的和新的用戶列表)。在每個文件中,有4個字段「Userid」,「UserName」,「Costcenter」,Approving Manager「。現在,我需要檢查舊用戶列表中是否存在新用戶列表中的每個Userid。如果需要,用新用戶列表中的「Costcenter」和「Approving Manager」的值替換舊用戶列表中相同列的值。如果這個條件失敗,那麼高亮顯示新用戶列表中的「用戶標識符」的整個行,舊用戶列表中沒有相應的匹配記錄,最後不會保留最後,但我們必須保存新用戶列表。有大約2000+用戶ID的

下面,我開始編碼,以獲取新用戶列表中的用戶列表到數組中。將對舊用戶列表執行相同操作。從那裏我如何通過修改像我上面解釋的新用戶列表?

$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格式的文件。在Powershell中處理CSV是一件輕而易舉的事,看看'Import-CSV'。 – vonPryz

+0

儘管如此,仍然可以使用Excel COM對象將文件保存爲CSV格式。 –

回答

0

如果在某種類型的正規秩序的每個列表的用戶ID,那麼它應該很容易在同一時間打開兩個工作簿時,維持2個指針( Row_for_old_userlist和Row_for_new_userlist),並比較新用戶ID與舊用戶ID的內容。

如果它們沒有某種秩序的外觀,那麼對於新用戶列表中的每個項目,您必須掃描整個舊用戶列表才能找到它們,然後採取行動。

我不確定以CSV格式保存是否符合您的要求 - 您可能無法以這種方式獲取數據。

但是 - 我認爲您確實在問如何設置Excel電子表格單元格的值。

如果是這樣,這裏有一些代碼用於將缺陷列表插入到電子表格中......然後將最後一個單元格的列A設置爲不同的顏色。奇怪的是,這個「價值2」部分......這是不可協商的。不要問我爲什麼它是「價值2」,但它是。

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