2015-04-15 29 views
0

我有一個powershell腳本爲列A中的每個唯一項目創建一個新的工作表,然後將每個唯一項目的相關行復制到各自的工作表。它工作正常,它只是非常慢,我想知道是否有一個簡單的方法來加速它。下面是該腳本:Powershell Excel有條件的複製循環運行緩慢

$arrExcelValues = @() 
$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent 
$path1 = Join-Path $executingScriptDirectory "my_workbook.xls" 
$Excel = new-object -comobject excel.application 
$Excel.Visible = $False 
$Workbook1 = $Excel.Workbooks.open($path1) 
$Worksheet1 = $Workbook1.WorkSheets.item(2) 

$rowCount = $worksheet1.UsedRange.Rows.Count 
$colCount = $worksheet1.UsedRange.Columns.Count 
$i = 2 
Do { 
    $arrExcelValues += $Worksheet1.Cells.Item($i, 1).Value() 
    $i++ 
} 
While ($Worksheet1.Cells.Item($i,1).Value() -ne $null) 
foreach ($objItem in $arrExcelValues) { 
    write-host $objItem 
} 
$arrExcelValues = $arrExcelValues | select -uniq 

$x=0 
While ($x -ne $arrExcelValues.length) { 
$Workbook1.Worksheets.add([System.Reflection.Missing]::Value,$Workbook1.Worksheets.Item($Workbook1.Worksheets.count)) 
$sheet_new = $Workbook1.worksheets.Item($Workbook1.Worksheets.count) 
$sheet_new.name = $arrExcelValues[$x] 
$SaveSheet = $Workbook1.WorkSheets.item($arrExcelValues[$x]) 

# Copy header row... 
1..($ColCount) | % {$SaveSheet.Cells.Item(1,$_) = $Worksheet1.Cells.Item(1,$_)} 

# Find rows to copy... 
$TestName = $arrExcelValues[$x] 
$SaveRow = 2 
2..($rowCount) | % { 
    If (($Worksheet1.Cells.Item($_,1).Text).ToUpper() -match $TestName) { 
     $row = $_ 
     1..($ColCount) | % {$SaveSheet.Cells.Item($SaveRow,$_) = $Worksheet1.Cells.Item($Row,$_).Text} 
     $SaveRow ++} 
} 
$x++ 
} 

$workbook1.Save() 
$workbook1.close($true) 
$Excel.Quit() 
Remove-Variable -Name excel 
Remove-Variable -Name Worksheet1 
Remove-Variable -Name Workbook1 
Remove-Variable -Name path1 

回答

0

而不是$Excel.Visible = $Falsefalse嘗試使用$Excel.ScreenUpdating = $false

也許會有所作爲?