在Powershell中阅读Excel表格

met*_*lah 12 excel powershell

下面的脚本读取Excel文档的工作表名称....

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

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

Marleybone
Paddington
Victoria
Hammersmith
Run Code Online (Sandbox Code Playgroud)

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

Alverton 
Annesley
Arnold
Askham
Run Code Online (Sandbox Code Playgroud)

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

City,Area
London,Marleybone
London,Paddington
London,Victoria
London,Hammersmith
Nottingham,Alverton 
Nottingham,Annesley
Nottingham,Arnold
Nottingham,Askham
Run Code Online (Sandbox Code Playgroud)

到目前为止这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

小智 19

这假设内容在每张纸上的B列中(因为不清楚如何确定每张纸上的列.)该列的最后一行也是纸张的最后一行.

$xlCellTypeLastCell = 11 
$startRow = 5 
$col = 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()
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 6

对不起,我知道这是一个旧的,但仍然想帮忙^_^

也许这是我读这个的方式,但假设 Excel 表 1 被称为“伦敦”并且有这些信息;B5="Marleybone" B6="Paddington" B7="维多利亚" B8="Hammersmith"。而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()
Run Code Online (Sandbox Code Playgroud)

这应该是输出(不带逗号):

市,区
---- ----
伦敦,Marleybone
伦敦,帕丁顿
伦敦,维多利亚
伦敦,哈默史密斯
诺丁汉,Alverton
诺丁汉,安尼斯雷
诺丁汉,阿诺德
诺丁汉,Askham