使用Excel的Powershell脚本运行缓慢

所以我有这个脚本,我在我的笔记本电脑上编码,工作正常,工作是将两个.csv文件合并成一个.xls文件。 运行包含两千行的.csv文件的脚本最多需要几秒钟。

但是,当我尝试运行它应该位于服务器上,它需要…小时。 我还没有完全运行,但在.xls文件中写入一行可能需要2-3秒。

所以我想知道什么是造成运行时的巨大增加。 我正在监视脚本运行时的CPU负载,并且负载为50-60%。

服务器有Ram的负载,和两个CPU核心。 我如何加快速度?

该脚本如下所示:

$path = "C:\test\*" $path2 = "C:\test" $date = Get-Date -Format d $csvs = Get-ChildItem $path -Include *.csv | Sort-Object LastAccessTime -Descending | Select-Object -First 2 $y = $csvs.Count Write-Host "Detected the following CSV files: ($y)" foreach ($csv in $csvs) { Write-Host " "$csv.Name } $outputfilename = "regSCI " + $date Write-Host Creating: $outputfilename $excelapp = New-Object -ComObject Excel.Application $excelapp.sheetsInNewWorkbook = $csvs.Count $xlsx = $excelapp.Workbooks.Add() $sheet = 1 $xlleft = -4131 foreach ($csv in $csvs) { $row = 1 $column = 1 $worksheet = $xlsx.Worksheets.Item($sheet) $worksheet.Name = $csv.Name $worksheet.Rows.HorizontalAlignment = $xlleft $file = (Get-Content $csv) Write-Host Worksheet created: $worksheet.Name foreach($line in $file) { Write-Host Writing Line $linecontents = $line -split ',(?!\s*\w+")' foreach($cell in $linecontents) { Write-Host Writing Cell $cell1 = $cell.Trim('"') $worksheet.Cells.Item($row, $column) = $cell1 $column++ } $column = 1 $row++ $WorkSheet.UsedRange.Columns.Autofit() | Out-Null } $sheet++ $headerRange = $worksheet.Range("a1", "q1") $headerRange.AutoFilter() | Out-Null } $output = $path2 + "\" + $outputfilename Write-Host $output $xlsx.SaveAs($output) $excelapp.Quit() 

为了加快现有的代码,请在创buildExcel对象后添加这些代码:

 $excelapp.ScreenUpdating = $false $excelapp.DisplayStatusBar = $false $excelapp.EnableEvents = $false $excelapp.Visible = $false 

而这些就在SaveAs之前:

 $excelapp.ScreenUpdating = $true $excelapp.DisplayStatusBar = $true $excelapp.EnableEvents = $true 

这导致Excel不会实时渲染工作表,并在每次更改angular色时触发事件。 如果你使一个应用程序不可见,那么很可能DisplayStatusBarScreenUpdating并不重要,但是我把它包括在内以防万一。

另外,你在每一行之后都运行Autofit() 。 这当然对性能没有帮助。