使用powershell在excel中从列复制并粘贴到行

时间:2018-04-15 19:57:29

标签: excel powershell

是否有任何方法可以使用上面尝试的电源shell从Excel复制并粘贴到我的脚本。我希望在另一张表格中将更多30列粘贴在Row中。我累了各种各样的组合..我能够复制,但在行中粘贴,例如O2行失败。

我想要列A1:A要复制到行O2,P2,r2 ....就像从列到行的转置一样。我没有收到任何错误。基本上,它不是从列到行的复制。尝试给row = 2和第2列Row ++,但它没有工作。

下面的方法是厌倦的方式之一。

$path = Read-Host -Prompt ("Enter the Sheet Location")
$xl   = New-Object -ComObject excel.application

$xl.visible = $true

$wbk = $xl.Workbooks.open($path)
$ws1 = $wbk.WorkSheets.item("Old Data")
$ws2 = $wbk.WorkSheets.item("New Data")

$ws1.activate()

#Pasting  Specific Name  from first column

$xlPasteValues = -4163          # Values only, not formulas
$xlCellTypeLastCell = 11        # to find last used cell

$used = $ws1.usedRange
$lastCell = $used.SpecialCells($xlCellTypeLastCell)
$column = $lastCell.column
$range = $ws1.UsedRange

[void]$ws1.Range("A2$column").Copy()
[void]$ws2.Range("O18:O18").PasteSpecial(-4163) 

$ws2.activate()

#Pasting Monthly perfomance

$xlPasteValues = -4163          # Values only, not formulas
$xlCellTypeLastCell = 11        # to find last used cell

$used = $ws1.usedRange
$lastCell = $used.SpecialCells($xlCellTypeLastCell)
$column = $lastCell.column
$range = $ws1.UsedRange

[void]$ws1.Range("B2$column").Copy()
[void]$ws2.Range("O8:O8").PasteSpecial(-4163) 

$ws2.activate()

2 个答案:

答案 0 :(得分:0)

The PasteSpecial method接受多个参数。

Object PasteSpecial(
    XlPasteType Paste,
    XlPasteSpecialOperation Operation,
    Object SkipBlanks,
    Object Transpose
)

第四个参数是Transpose,默认为false。那就是你想要的那个。

第二个参数是Operation,它接受​​XlPasteSpecialOperation枚举 - specified here。第三个参数是SkipBlank,可以是truefalse。这两个参数以及转置都是可选的,这就是原始代码中PasteSpecial工作的原因。

# Option 1 - specify all arguments.

$xlPasteValues = -4163
$xlPasteSpecialOperationNone = -4142    # default

[void]$ws2.Range("O2").PasteSpecial($xlPasteValues,$xlPasteSpecialOperationNone,$false,$true)
# Option 2 - skip what's not required

$xlPasteValues = -4163

[void]$ws2.Range("O2").PasteSpecial($xlPasteValues, [System.Type]::Missing, [System.Type]::Missing, $true)

答案 1 :(得分:0)

这个选项已经累了,但我已经厌倦了,但它不是我能实现的,因为它粘贴了唯一值,因为列中有不同的数据,所有这些都需要粘贴在行中。 $ xlPasteValues = -4163

[void] $ ws2.Range(“O2”)。PasteSpecial($ xlPasteValues,[System.Type] :: Missing,[System.Type] :: Missing,$ true)