使用PowerShell将范围从一个工作簿表复制到另一工作簿表

时间:2019-07-08 06:07:07

标签: excel powershell

我试图制作一个脚本,从一个工作簿表复制到另一个工作表,并粘贴在完全相同的范围内。我尝试了五种不同的解决方案,但失败了。

$excel=new-object -comobject excel.application;
$excel.visible=$true;
$SourceWorkBook=$Excel.Workbooks.open("C:\Oldsheet.xlsx");
$TargetWorkBook=$excel.workBooks.open("C:\Newsheet.xlsx");
$SourceWorkBook.WorkSheets.item("Numbers").activate();
$SourceRange=$SourceWorkBook.WorkSheets.item("Numbers").range("B2:G400");
$SourceRange.copy() | out-null;
$TargetWorkBook.worksheets.item("Numbers").paste("B2:G400");

上面的代码打开了工作簿,并选择了要复制的范围,但自身并未粘贴。另外,我想禁止显示错误消息($ Excel.DisplayAlerts = $ False不起作用),并在粘贴后保存文件。

1 个答案:

答案 0 :(得分:0)

尝试一下:

    Add-Type -AssemblyName Microsoft.Office.Interop.Excel

    $excel               = New-Object -ComObject Excel.Application
    $excel.Visible       = $true
    $excel.DisplayAlerts = $false

    $SourceWorkBook=$Excel.Workbooks.Open("C:\Oldsheet.xlsx")
    $TargetWorkbook=$excel.workBooks.Open("C:\Newsheet.xlsx")

    $SourceWorkBook.WorkSheets.Item("Numbers").Activate()
    $SourceRange=$SourceWorkBook.WorkSheets.Item("Numbers").Range("B2:G400")

    [void]$SourceRange.Copy() 
    [void]$TargetWorkBook.worksheets.item("Numbers").Range("B2:G400").PasteSpecial( [Microsoft.Office.Interop.Excel.XlPasteType]::xlPasteAll )

    [void]$SourceWorkBook.Close()
    [void]$TargetWorkBook.Save()
    [void]$TargetWorkBook.Close()

    $excel.DisplayAlerts = $true

    [void]$excel.Quit()

    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null