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