在PowerShell中复制并粘贴工作簿之间的excel范围

时间:2016-08-09 18:30:45

标签: excel excel-vba powershell vba

我正在尝试在两个工作簿之间复制并粘贴excel范围,但复制功能无法正常工作。 请观察以下代码段。

$worksheetCSV.activate()
$range1=$worksheetCSV.Range("a","h")
$worksheetCSV.copy($range1)

$worksheetXLS.activate()
$lastRow = $worksheetXLS.UsedRange.rows.count + 1
$range2=$worksheetXLS.Range("A" + $lastrow)
$worksheetXLS.Paste($range2)

这段代码几乎可以使用,但粘贴的唯一单元格是:

$worksheetXLS.Paste($range2)

有没有办法可以复制要粘贴的范围的实际内容。

2 个答案:

答案 0 :(得分:1)

要将范围从一个工作表复制到另一个工作表(整个列A到H),对代码的这种修改将起作用:

$worksheetCSV.activate()
$range1 = $worksheetCSV.Range("A:H")
$range1.copy()

$worksheetXLS.activate()
$range2 = $worksheetXLS.Range("A:H")
$worksheetXLS.Paste($range2)

但是,由于您要在其他工作表中添加现有数据,因此必须以不同方式设置目标范围,以免覆盖已存在的内容。我还假设现有范围包含您不想在其他工作表中复制的标题,因此我在2开始了该行。

根据您当前的代码,这应该有效:

$worksheetCSV.activate()
$lastRow1 = $worksheetCSV.UsedRange.rows.count
$range1 = $worksheetCSV.Range("A2:H$lastRow1")
$range1.copy()

$worksheetXLS.activate()
$lastRow2 = $worksheetXLS.UsedRange.rows.count + 1
$range2 = $worksheetXLS.Range("A$($lastRow2):H$($range1.Rows.Count)")
$worksheetXLS.Paste($range2)

要复制和粘贴,源范围和目标范围的大小应相同。因此,此代码设置源工作表中的数据的实际范围(减去第一行中的标题)并复制它。然后,它将目标范围设置为从高于使用范围的一行开始,并向下延伸源范围中的总行数(因此两个范围大小应匹配)。最后,将数据粘贴到范围内。

答案 1 :(得分:0)

我在做类似的事情时遇到了这个问题,虽然它有很大帮助,但我认为建议的答案遗漏了一部分。 $range2 的行对我不起作用,因为 H$($range1.rows.count) 不是正确的值。

如果我从源工作表复制 50 行,并且目标中已经有 50 行并且我想粘贴这些行,那么我要粘贴的范围必须是 A51:H101。在此处的解决方案中,它将是 A51:H50。对我来说,我必须将复制行的范围添加到总行数中才能使正确的粘贴范围起作用。

$range2 = $worksheetXLS.Range("A$($lastRow2):H$($lastRow2 + ($range1.Rows.Count))")