2012-11-26 70 views
2

我正在製作一個腳本,它將通過2,000個XML文件解析數據&然後將其輸出到Excel文件。 這是我到目前爲止有:解析XML和輸出到Excel

#Get XML File 
$path = Get-ChildItem C:\Users\bcamareno\Desktop\xml\xml 

#Start Excel 
$xl=New-Object -ComObject "Excel.Application" 
$wb=$xl.Workbooks.Add() 
$ws=$wb.ActiveSheet 

$cells=$ws.Cells 
$cells.item(1,1)="HDD Report" 
$cells.item(1,1).font.bold=$True 
$cells.item(1,1).font.size=18 

#Rows & Cols 
$row=3 
$col=1 
$A=4 
$B=4 
$C=4 
$D=1 
$E=2 
$F=3 

#column headings 
"Server","Disk0","Disk1","Disk2","Disk3","Disk4","Disk5","Disk6","Disk7" | foreach { 
    $cells.item($row,$col)=$_ 
    $cells.item($row,$col).font.bold=$True 
    $col++ 
} 

#Site Code 
foreach ($item in $Path) { 
$cells.item($A,$D)= $item -replace "_pdisk.xml","" 
     $A++ 
} 

#Grab ProductID 
foreach ($item in $Path) { 
    [xml]$content = Get-Content "c:\Users\bcamareno\Desktop\xml\xml\$item" 
    $try= $Content.SelectNodes('//ProductID') | select "#Text" 
    $cells.item($B,$E)= $try -replace "@{#text=","" -replace "}","" 
    $B,$E++ 
} 

$xl.Visible=$True 

但是當我運行它,數據出來不對勁,好像這只是解析的最後一個文件&然後補充說,結果給細胞。

如果需要,我可以添加一個XML。

回答

0

$B永遠不會增加,所以您不會將行添加到電子表格 - 只需將相同的行重寫2000次即可。

我還建議您使用比單個字母更多的描述性變量名稱。

而且,改變這一行:

[xml]$content = Get-Content "c:\Users\bcamareno\Desktop\xml\xml\$item" 

要這樣:

[xml]$content = Get-Content $item.FullName 

這樣,當你改變你的XML文件的位置,你只需要做一次(當你請致電Get-ChildItem),因爲您忘記更新該路徑的所有實例,所以不會追趕2小時的「錯誤」。

+0

感謝您的答覆。那麼獲得$ B和$ E增加的正確方法是什麼?因爲我嘗試了幾件事情,但都沒有成功。 –

+0

'$ E' * *正在增加。只有'$ B'不是,因爲'$ B,$ E ++'不會增加'$ B'。 $ a = 1; $ b = 2; $ a,$ b ++; $ a,$ b ++;' - '$ a'保持在'1','$ b'增量。你想要的是'$ B ++; $ E ++'(由於這個評論框的限制,格式化一點點)。 – alroc

+0

再次感謝。我改變了你的建議,它仍然以錯誤的順序出現。我可以給你一個截圖,如果你給我你的電子郵件.. –

0

我相信我在這篇文章稍微遲了一點,但是我做了一些測試,它適用於我。

#Grab ProductID 
foreach ($item in $path) { 
    [xml]$content = Get-Content "c:\Users\bcamareno\Desktop\xml\xml\$item" 
    foreach ($try in $($Content.SelectNodes('//ProductID') | select "#Text")) { 
    $cells.item($B,$E)= $try -replace "@{Size=","" -replace "}","" 
    $B,$E++ 
    } 
    $B++ 
    $E=2 
} 

感謝和我的僞英語不好意思:P