Я пытаюсь объединить несколько файлов Excel вместе с Powershell, каждый файл имеет свое имя, но листы в файлах одинаковы. Я попытался переместить первый файл в каталоге в папку вывода с общим именем, чтобы я мог определить путь в коде.
Скрипт переместит и переименует первый файл, но когда он возвращается к копированию содержимого первого файла, я получаю следующую ошибку.
"Извините, мы не смогли найти файл Three.xlsx. Возможно, он был перемещен, переименован или удален?"
Кто-нибудь знает, почему это так? Или более эффективное решение, чтобы сделать это, поскольку я буду использовать это для файлов, которые имеют 10 листов в каждом, а некоторые из листов имеют 400 000 строк. Спасибо.
Код следующий:
write-ascii 'Merging' -Fore Green
$path = "C:\Users\user1\Desktop\ReportScript\Test\"
$contents = Get-ChildItem -Path $path -Force -Recurse -File | Select-Object -First 1
Move-Item "C:\Users\user1\Desktop\ReportScript\Test\$contents" "C:\Users\user1\Desktop\ReportScript\TestMerge\TestOutput.xlsx"
$FinalReport = "C:\Users\user1\Desktop\ReportScript\TestMerge\TestOutput.xlsx"
$xl = new-object -c excel.application
$xl.displayAlerts = $false # don't prompt the user
Start-Sleep -Seconds 5
foreach ($File in (Get-ChildItem -Path $path))
{
$wb1 = $xl.workbooks.open($FinalReport) # open target
$worksheetOutcome = $wb1.WorkSheets.item(“Sheet1”)
$wb2 = $xl.workbooks.open($File, $null, $true) # open source, readonly
$worksheet2 = $wb2.WorkSheets.item(“Sheet1”)
$worksheet2.activate()
$lastRow1 = $worksheet2.UsedRange.rows.count
$range1 = $worksheet2.Range("A1:O$lastRow1")
$range1.copy()
$worksheetOutcome.activate()
$lastRow2 = $worksheetOutcome.UsedRange.rows.count + 1
$range2 = $worksheetOutcome.Range("A$($lastRow2):O$($range1.Rows.Count)")
$worksheetOutcome.Paste($range2)
$wb2.close($false) # close source workbook w/o saving
}