2016-07-28 40 views
0

Я создал строку, состоящую из идентификаторов, разделенных символом новой строки (\ n). Теперь я хочу вставить эту строку в excel, чтобы все идентификаторы вставлялись в разные ячейки в столбце. Для этого я заполнил строку в $ finCode, которую я скопировал в буфер обмена. Теперь мне нужно выбрать ячейку на листе excel, а затем вставить всю строку в эту ячейку, чтобы все идентификаторы были заполнены во всех разных ячейках excel в том же столбце. код выглядит следующим образом:Вставка данных из буфера обмена в ячейку excel с использованием powershell

Я импортировать книги как:

$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 в разных ячейках столбца.

ответ

0

Могу я предложить альтернативу для копирования/вставки?

У меня есть сценарий, который генерирует большую книгу Excel, и ранее я использовал метод copy/paste, потому что запись ячейки по ячейке была болезненно медленной, однако затем я столкнулся с проблемами при попытке сделать что-нибудь еще в одно и то же время. Если бы я использовал copy/paste в любом другом приложении одновременно, это испортило бы мой вывод.

Я бы рекомендовал использовать многомерный массив вместе с 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 
+0

Привет @ Джон, где я должен упомянуть столбец нет. В диапазоне. Например, здесь упоминается «А». Теперь у меня есть столбец типа 3, который нужно заполнить, так как я могу упомянуть об этом в функции кода (диапазона). –

+0

@ shikher.mishra, OK Я обновил код, чтобы ссылаться на диапазон ячеек, используя номера столбцов вместо формата A1. Я оставил пример формата A1 на всякий случай, если кто-либо найдет его полезным. –

Смежные вопросы