下面的脚本读取Excel文档的工作表名。
我如何改进它,以便它能够提取每个工作表中B列的所有内容(从第5行开始--因此忽略第1-4行)并创建一个对象?
例如,如果工作表1(称为伦敦)中的B列具有以下值:
Marleybone
Paddington
Victoria
Hammersmith工作表2中的C列(称为诺丁汉)具有以下值:
Alverton
Annesley
Arnold
Askham我想要创建一个类似于这样的对象:
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发布于 2013-10-06 22:31:10
这假设内容在每个工作表的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()发布于 2016-12-30 11:02:43
对不起,我知道这是个老问题,但我还是想帮助^_^
也许这就是我读这篇文章的方式,但假设excel sheet 1被命名为"London“,并有这样的信息: B5="Marleybone”B6="Paddington“B7="Victoria”B8="Hammersmith“。excel 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
伦敦,帕丁顿
伦敦,维多利亚
伦敦,哈默史密斯
诺丁汉湾
诺丁汉湾
诺丁汉湾
诺丁汉湾
发布于 2018-07-13 15:38:37
当我试图使用Excel电子表格作为源代码自动化Cisco SIP电话配置时,这对我非常有帮助。我唯一的问题是,当我试图创建一个数组并使用$array | Add-Member ...填充它时,我需要稍后使用它来生成配置文件。只要定义一个数组并使它成为for循环,就可以正确地存储。
$lastCell = 11
$startRow, $model, $mac, $nOF, $ext = 1, 1, 5, 6, 7
$excel = New-Object -ComObject excel.application
$wb = $excel.workbooks.open("H:\Strike Network\Phones\phones.xlsx")
$sh = $wb.Sheets.Item(1)
$endRow = $sh.UsedRange.SpecialCells($lastCell).Row
$phoneData = for ($i=1; $i -le $endRow; $i++)
{
$pModel = $sh.Cells.Item($startRow,$model).Value2
$pMAC = $sh.Cells.Item($startRow,$mac).Value2
$nameOnPhone = $sh.Cells.Item($startRow,$nOF).Value2
$extension = $sh.Cells.Item($startRow,$ext).Value2
New-Object PSObject -Property @{ Model = $pModel; MAC = $pMAC; NameOnPhone = $nameOnPhone; Extension = $extension }
$startRow++
}我以前在添加成员的数组中添加信息没有问题,但那是在PSv2 2/3中出现的,我已经离开它一段时间了。虽然简单的解决方案拯救了我手动配置100+手机和扩展--但没有人愿意这样做。
https://stackoverflow.com/questions/19211632
复制相似问题