Объединение нескольких файлов Excel из одного каталога - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь объединить несколько файлов 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

        } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...