gpt4 book ai didi

excel - 使用 Excel 的 Powershell 脚本运行缓慢

转载 作者:行者123 更新时间:2023-12-02 19:26:43 25 4
gpt4 key购买 nike

所以我在我的笔记本电脑上编写了这个脚本,它工作得很好,工作是将两个 .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()

最佳答案

要加快现有代码的速度,请在创建 Excel 对象后添加这些代码:

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

这些就在 SaveAs 之前:

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

这会导致 Excel 无法实时渲染工作表,并且每次更改内容时都会触发事件。如果您使应用程序不可见,那么 DisplayStatusBarScreenUpdating 很可能并不重要,但我将其包括在内以防万一。

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

关于excel - 使用 Excel 的 Powershell 脚本运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37916607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com