处理PowerShell ForEach循环中的工作表

时间:2015-05-01 19:18:50

标签: excel powershell

我在PowerShell脚本中有ForEach循环,该脚本试图遍历在过去2小时内在文件夹中创建的每个文件。它将占用每个文件,删除某些列和行,并且只留下一个包含ActiveFaults标题的列。然后它将进行排序/分组和格式化,并为每个文件提供一串ActiveFaults。

我的脚本的输出是我需要的,但它需要花费很多时间来处理。有没有更有效的方法来做到这一点?此外,它偶尔会给我一个错误,说“该对象不包含Workbooks.Open()方法”......有关为什么会这样做的任何想法?为什么这个问题会断断续续?提前谢谢。

$PathMX1005 = "\source"
filesMX1005 = Get-ChildItem $PathMX1005 -recurse -include *1Hz*.csv | Where { $_.CreationTime -ge [datetime]::Now.AddMinutes(-180) }

Copy-Item $filesMX1005 \destination -Recurse

$files2MX1005 = Get-ChildItem \destination -Recurse

foreach($file in $files2MX1005) {

    $Excel = New-Object -ComObject excel.application
    $Excel.visible = $false
    $Workbook = $Excel.Workbooks.open($file.FullName) 
    $range = $Workbook.ActiveSheet.Range("A1:FZ1").EntireColumn 
    $range2 = $Workbook.ActiveSheet.Range("A1:A34").EntireRow
    $range.Delete()
    $range2.Delete()
    $Excel.DisplayAlerts=$False
    $Workbook.SaveAs("c:\StrippedHeader.csv")

    $FaultsMX1005 = Import-CSV ":\StrippedHeader.csv" | Group-Object ActiveFaults | foreach-object { $_.group | select -last 1} | Out-String 

    $Excel.Workbooks.Close()
    $Excel.Quit()

0 个答案:

没有答案