私はこのスクリプトを私はちょうどうまく動作する私のラップトップでコード化している仕事は、1つの.xlsファイルに2つの.csvファイルを結合することです。 数千の行を含む2つの.csvファイルを使用してスクリプトを実行すると、数秒かかることがあります。Excelスロー実行Excelを使用してPowershellスクリプト
しかし、サーバーを配置するサーバーで実行しようとすると、時間はかかります。私は完全な実行をしていませんが、.xlsファイルに1行を書き込むには2〜3秒かかります。
私は不思議なことは、ランタイムの大幅な増加を引き起こしているものです。スクリプト実行中にCPU負荷を監視していますが、負荷は50〜60%です。
サーバーにはRamと2つの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()
返信いただきありがとうございます。間違いなくこれを試してみます。 'Autofit()' -partについては、エクセルコードを盗まれたばかりなので、明確にしてください。 –
@AndersEkelund AutoFit()は、セルの内容に対するカラムの幅を調整します。必要な場合は、シートごとに1回、すべての行を挿入してからではありません。 –