powershell excel获取第一行(标题)列数

时间:2017-10-12 06:26:30

标签: excel powershell

我试图计算第一行(A1-D1)的单元格编号(称为标题)并将该计数作为计数器。

我们一直在使用Usedrange查找大部分内容来计算列数:

$headercolcount=($worksheet.UsedRange.Columns).count 

UsedRange将捕获整个活动表中的最大计数,如果标题下方有额外的内容数据,则与第一行中的列数不同。

我只想抓住第一行:

[Sample excel view]

更新: 为了更清晰的视图,这是一个例子。 作为1F& 1G没有值存在,所以答案应该是5,因为它包含数据为1A-1E。那么我应该如何正确地抓住5?

[enter image description here]

2 个答案:

答案 0 :(得分:1)

    Get-Process excel | Stop-Process -Force
# Specify the path to the Excel file and the WorkSheet Name
$FilePath = "C:\temp\A_A.xlsx"
$SheetName = "Blad1" # In english this is probably Sheet1
# Create an Object Excel.Application using Com interface
$objExcel = New-Object -ComObject Excel.Application
# Disable the 'visible' property so the document won't open in excel
$objExcel.Visible = $false
$objExcel.DisplayAlerts = $false
# Open Excel file and in $WorkBook
$WorkBook = $objExcel.Workbooks.Open($FilePath)
# Load WorkSheet 'Blad 1' in variable Worksheet
$WorkSheet = $WorkBook.sheets.item($SheetName)
$xlup = -4162
$lastRow = $WorkSheet.cells.Range("A1048576").End($xlup).row

# get the highest amount of columns
$colMax = ($WorkSheet.UsedRange.Columns).count
# initiatie a counter
$count = $null
# set the column you'd like to count
$row = 1

for ($i = 0; $i -le $colMax; $i++){
    if($worksheet.rows.Item("$row").columns.Item($i+1).text){
        $count++
    }    
}

$count

这应该有效。它需要最多的列。然后循环直到达到该数量。在循环期间,它检查该行上的单元格是否已填充,如果是,则将其添加到计数器。

如果你有数百万行,这可能不是最好的方法,但这对我有用。

我用excel文件测试它:

enter image description here

$row = 1 this will give : 5
$row = 2 this will give : 6
$row = 3 this will give : 7
$row = 4 this will give : 8

答案 1 :(得分:0)

# Specify the path to the Excel file and the WorkSheet Name
$FilePath = "C:\temp\A_A.xlsx"
$SheetName = "Blad1" # In english this is probably Sheet1
# Create an Object Excel.Application using Com interface
$objExcel = New-Object -ComObject Excel.Application
# Disable the 'visible' property so the document won't open in excel
$objExcel.Visible = $false
$objExcel.DisplayAlerts = $false
# Open Excel file and in $WorkBook
$WorkBook = $objExcel.Workbooks.Open($FilePath)
# Load WorkSheet 'Blad 1' in variable Worksheet
$WorkSheet = $WorkBook.sheets.item($SheetName)
$xlup = -4162
$lastRow = $WorkSheet.cells.Range("A1048576").End($xlup).row
$amountofcolumns = $worksheet.UsedRange.Rows(1).Columns.Count   
#OUTPUT
write-host "Last Used row:" $lastRow 
Write-host "Amount of columns" $amountofcolumns
#show all columnnames
for($i =  1 ; $i -le $amountofcolumns; $i++){
    $worksheet.Cells.Item(1,$i).text
}

这将显示您有多少行,并将显示第一行中的所有值,以及您的标题。