2012-11-26 3 views
2

데이터 용 XML 파일 2,000 개를 구문 분석하여 데이터 파일 &을 구문 분석하여 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 파일의 위치를 ​​변경할 때

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

그 방법은, 당신은 한 번만 할 필요가 : 여기에

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

을 전화 Get-ChildItem), 해당 경로의 모든 인스턴스를 업데이트하는 것을 잊었 기 때문에 2 시간 동안 "버그"를 쫓지 않습니다.

+0

감사합니다. 따라서 $ B와 $ E를 증가시키는 올바른 방법은 무엇입니까? 나는 여러 가지 일을 시도했기 때문에 그들 중 누구도 일하지 못했습니다. –

+0

'$ E' *가 증가하고 있습니다. '$ B, $ E ++'는'$ B'를 증가시키지 않기 때문에'$ 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

관련 문제