我正在尝试将多个Excel文件与Powershell合并在一起,每个文件具有不同的名称,但是文件中的工作表相同。我试图将目录中的第一个文件移动到具有通用名称的Output文件夹,以便我可以在代码中定义路径。
脚本将移动并重命名第一个文件,但是当它返回以复制第一个文件的内容时,出现以下错误。
“对不起,我们找不到文件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
}