试图在Powershell中计算Excel行数

时间:2015-04-15 15:43:32

标签: excel powershell

我在多个目录中有一组Excel个电子表格,我试图计算行数。我已经取得了有限的成功,因为我有点PowerShell新手,并且希望我能通过询问获得更好的运气。
我有Excel可用,但这是我迄今为止取得的最好进展,据我所知,它是给出了我占用的细胞数而不是行数。
有什么想法吗?

get-content (Get-ChildItem -Path .\ -Include *.xlsx -Recurse) | measure-object -line

我需要能够在多个相似但不具有相同结构的目录中部署它,但我可以假设目录中的每个Excel文件都与计数相关。

这里有一些可能的单个文件解决方案,但主要与项目计数而不是批量检查有关。

1 个答案:

答案 0 :(得分:0)

我不认为您可以在不实际打开Excel文件的情况下获取行数。因此,您需要选择是否要快速,或者如果您希望它准确。您的文件是否包含标题行,是否应包含这些行?

在Excel中打开文件后,获取文件的UsedRange很容易,而在Excel中打开文件非常简单。 UsedRange并不总是完全准确地确定具有数据的实际范围,但通常它是一个很好的指示。可以将单元格格式化为具有数据的单元格,在这种情况下,您的UsedRange将包含那些空白但格式化的单元格。细胞。如果这不是一个问题,那么您的问题很简单。

我将使用Get-ChildItem,就像你一样,获取实际文件。我还将使用Excel ComObject打开程序并与之交互(打开文件,获取信息,关闭文件)。我将打开每个文件并获取文件的最后一个活动工作表的UsedRange,并获取rows属性的计数。然后,我们将使用Add-Member将该信息附加到我们从[FileInfo]获取的Get-ChildItem对象,并在变量中收集该信息。

$Excel = New-Object -comobject Excel.application
$ExcelFiles = Get-ChildItem .\*.xlsx -recurse | ForEach{
    $WB = $Excel.Workbooks.Open($_.fullname)
    Add-Member -InputObject $_ -NotePropertyName 'RowCount' -NotePropertyValue ($Excel.ActiveSheet.UsedRange.Rows.Count) -PassThru
    $WB.Close()
}
$Excel.Quit()

从这里您可以输出您现在拥有的信息。例如,只是文件名和行数:

$ExcelFiles | Format-Table Name,RowCount