在PowerShell中读取Excel工作表

下面的脚本读取Excel文档的表格名称….

我怎么能改进它,所以它可以在每个工作表中提取列B的所有内容(从第5行开始,因此行1-4被忽略)并创build一个对象?

例如,如果工作表1中的列B(称为伦敦)具有以下值:

Marleybone Paddington Victoria Hammersmith 

和工作表2(称为)诺丁汉中的列C具有以下值:

 Alverton Annesley Arnold Askham 

我想创build一个对象,从这看起来像这样:

 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 

这假定内容在每张纸上的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() 

对不起,我知道这是一个旧的,但仍然觉得像帮助^ _ ^

也许这是我读这个的方式,但是假设excel工作表1被称为“伦敦”并且有这个信息; B5 =“马利骨”B6 =“帕丁顿”B7 =“维多利亚”B8 =“哈默史密斯”。 而Excel表格2被称为“诺丁汉”,并有这个信息; 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
伦敦,帕丁顿
伦敦,维多利亚
伦敦,哈默史密斯
诺丁汉,阿尔弗顿
诺丁汉,安尼斯利
诺丁汉,阿诺德
诺丁汉,Askham