【问题标题】:Copy and paste from column to row in excel using powershell使用powershell在excel中从列复制并粘贴到行
【发布时间】:2018-09-25 12:53:17
【问题描述】:

是否有任何方法可以使用上面尝试的 power shell 从 Excel 中的列复制和粘贴是我的脚本。我想在另一张纸上粘贴大约 30 列。我已经厌倦了各种组合..我可以复制,但在粘贴行时,例如O2 行失败了。

我希望列 A1:A 被复制到行 O2,P2 ,r2 .... 它就像从列转置到行。我没有收到任何错误。基本上,它不是从列复制到行。尝试给出第 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()

【问题讨论】:

  • Edit 你的问题并在那里发布 cmets。 $row 分配在哪里?失败时会出现什么错误?
  • Edit 你的问题并在那里发布 cmets

标签: excel powershell


【解决方案1】:

The PasteSpecial method 接受多个参数。

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

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

第二个参数是Operation,它接受XlPasteSpecialOperation枚举-specified here。第三个参数是SkipBlank,可以是true或false。这两个参数以及转置都是可选的,这就是您原始代码中的 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)

【讨论】:

  • 我厌倦了这两个选项,他们现在工作正常,但挑战是直到最后一个数据才占用整个列,例如,如果我在列中有 98 个,则只有 6 个被复制。其余未选中。请提供相同的建议。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2012-10-28
    • 2011-07-29
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多