使用PowerShell将数据从剪贴板粘贴到excel单元格

时间:2016-07-28 11:26:00

标签: powershell powershell-v2.0 powershell-v3.0

我创建了一个字符串,其中包含由新换行符(\ n)分隔的ID。现在我想将此字符串粘贴到excel中,以便将所有ID粘贴到列中的不同单元格中。对于所有这些,我已经在$ finCode中填充了我已复制到剪贴板的字符串。现在我需要在Excel工作表中选择一个单元格,然后将整个字符串粘贴到该单元格上,以便所有ID都填充在同一列中excel的所有不同单元格中。 代码如下:

我将工作簿导入为:

$workbook = $xldoc.Workbooks.Open($testType)

我正在检查要处理的工作表:

$mysheet = $workbook.worksheets | where {$_.name -eq "JPT"}

我在函数中使用这个$ mysheet作为$ currentSheet

现在功能如下:

addtitle()
{
$finCode=""

                         $fRow=$intRow


                         for($intRow = $fRow ; $intRow -le $maxRow ; $intRow++){

                            $codeName = $currentCode
                            $fin = $codeName + "_" + $i + "`n"
                            $finCode=$finCode+$fin


                            $i= $i + 1
                         }

                        # 

                        $currentSheet.Cells.Item($fRow,$currentCol).Value2  = $finCode

                         $clipboardData = $finCode

                         [System.Windows.Forms.Clipboard]::SetText($ClipboardData)



                         $currentSheet.Cells.Item($fRow,$currentCol).Select() | Out-Null

                         $currentSheet.Paste($finCode) | Out-Null

}

我收到此错误:您无法在空值表达式上调用方法。 请帮助我在列的不同单元格中填充excel中字符串的值。

1 个答案:

答案 0 :(得分:0)

我可以建议复制/粘贴的替代方法吗?

我有一个生成大型Excel工作簿的脚本,之前我使用过复制/粘贴方法,因为逐个单元格写入速度很慢,但是当我尝试同时执行任何其他操作时遇到了问题。如果我同时在任何其他应用程序中使用复制/粘贴,它会弄乱我的输出。

我建议使用多维数组以及单元格范围的Value2。

以下是一个通用示例,您应该能够适应您的需求:

# Open Excel
$excel = New-Object -ComObject Excel.Application
# Make Excel visible
$excel.Visible = $true
# Open new workbook
$workbook = $excel.Workbooks.Add()
# Use first sheet
$worksheet = $workbook.Worksheets.Item(1)
# Set a base string for the example
$baseString = "RowTextExample"
# Set column number
$columnNum = 1
# Set starting row number
$startRowNum = 1
# Set ending row number
$endRowNum = 10
# Create an empty multi-dimensional array that with the first digit equating to the number of rows and second equating to the number of columns
$multiArray = New-Object 'object[,]' $endRowNum, 1
# Since rows start at 1 and an array index starts at 0, set a variable to track the array index that starts at 0
$arrayIndex = 0
# Start at first row and go to the end row adding appending the base string with the row number
for($rowNum = $startRowNum; $rowNum -le $endRowNum ; $rowNum++)
{
    $multiArray[$arrayIndex, 0] = $baseString + "_$rowNum"
    $arrayIndex++
}
# Set the range where the data will be placed; the size must match the size of the multi-dimensional array
# Example using A1 format instead of column number: $range = $worksheet.Range("A$($startRowNum):A$endRowNum")
$range = $worksheet.Range($worksheet.Cells($startRowNum, $columnNum), $worksheet.Cells($endRowNum, $columnNum))
# Write the multi-dimensional to the range
$range.Value2 = $multiArray