我在多个目录中有一组Excel
个电子表格,我试图计算行数。我已经取得了有限的成功,因为我有点PowerShell
新手,并且希望我能通过询问获得更好的运气。
我有Excel
可用,但这是我迄今为止取得的最好进展,据我所知,它是给出了我占用的细胞数而不是行数。
有什么想法吗?
get-content (Get-ChildItem -Path .\ -Include *.xlsx -Recurse) | measure-object -line
我需要能够在多个相似但不具有相同结构的目录中部署它,但我可以假设目录中的每个Excel
文件都与计数相关。
这里有一些可能的单个文件解决方案,但主要与项目计数而不是批量检查有关。
答案 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