2013-10-06 3 views
4

아래 스크립트는 엑셀 문서의 시트 이름을 읽습니다 ....Powershell에서 엑셀 시트 읽기

행 B에서 모든 내용을 추출 할 수 있도록 어떻게 개선 할 수 있습니까? 1-4) 무시됩니다) 각 워크 시트 및 개체를 만드는?

예. 워크 시트 1 (라고 런던)의 열 B는 다음과 같은 값이있는 경우 :

Alverton 
Annesley 
Arnold 
Askham 

내가 만들고 싶어 : 워크 시트 2

Marleybone 
Paddington 
Victoria 
Hammersmith 

및 열 C를 (라고) 노팅엄는 다음과 같은 값을가집니다

City,Area 
London,Marleybone 
London,Paddington 
London,Victoria 
London,Hammersmith 
Nottingham,Alverton 
Nottingham,Annesley 
Nottingham,Arnold 
Nottingham,Askham 

이 지금까지 내 코드입니다 : 그것은 다음과 같습니다에서 해당 객체

clear all 

sheetname = @() 

    $excel=new-object -com excel.application 
    $wb=$excel.workbooks.open("c:\users\administrator\my_test.xls") 
    for ($i=1; $i -le $wb.sheets.count; $i++) 
    { 
     $sheetname+=$wb.Sheets.Item($i).Name; 
    } 

$sheetname 

답변

9

이 내용은 각 시트의 B 열에 있다고 가정합니다. 각 시트의 열을 결정하는 방법이 명확하지 않으므로 그 열의 마지막 행도 시트의 마지막 행입니다.

$xlCellTypeLastCell = 11 
$startRow,$col=5,2 

$excel=new-object -com excel.application 
$wb=$excel.workbooks.open("c:\users\administrator\my_test.xls") 

for ($i=1; $i -le $wb.sheets.count; $i++){ 
    $sh=$wb.Sheets.Item($i) 
    $endRow=$sh.UsedRange.SpecialCells($xlCellTypeLastCell).Row 
    $city=$sh.Cells.Item($startRow,$col).Value2 
    $rangeAddress=$sh.Cells.Item($startRow+1,$col).Address() + ":" +$sh.Cells.Item($endRow,$col).Address() 
    $sh.Range($rangeAddress).Value2 | foreach { 
     New-Object PSObject -Property @{City=$city;Area=$_} 
    } 
} 
$excel.Workbooks.Close() 
2

미안이 여전히 이전지만 알고는 도와 같은 느낌^_^

아마의 난이 있지만, 엑셀 시트 1 "런던"이라고하며이되어 가정을 읽는 방법 이 정보; B5 = "Marleybone"B6 = "패딩턴"B7 = "빅토리아"B8 = "해머 스미스". 엑셀 시트 2는 "Nottingham"이라고하며이 정보를 가지고 있습니다. C5 = "Alverton"C6 = "Annesley"C7 = "Arnold"C8 = "Askham". 그렇다면이 코드가 아래처럼 작동한다고 생각합니다.^_^

$xlCellTypeLastCell = 11 
$startRow = 5 

$excel = new-object -com excel.application 
$wb = $excel.workbooks.open("C:\users\administrator\my_test.xls") 

for ($i = 1; $i -le $wb.sheets.count; $i++) 
    { 
     $sh = $wb.Sheets.Item($i) 
     $endRow = $sh.UsedRange.SpecialCells($xlCellTypeLastCell).Row 
     $col = $col + $i - 1 
     $city = $wb.Sheets.Item($i).name 
     $rangeAddress = $sh.Cells.Item($startRow, $col).Address() + ":" + $sh.Cells.Item($endRow, $col).Address() 
     $sh.Range($rangeAddress).Value2 | foreach{ 
      New-Object PSObject -Property @{City = $city; Area=$_} 
     } 
    } 

$excel.Workbooks.Close() 

이 (쉼표)없이 출력해야

도시 지역
---- ----
런던 Marleybone
런던 패딩
런던, 빅토리아
런던, 함머 스미스
노팅엄, Alverton
Annesley의 Nottingham
Arnold의 Nottingham
노팅엄, Askham