2016-09-13 3 views
3

У меня есть сценарий, который берет данные из существующего CSV-файла и копирует в существующую книгу (xlsx).Данные пасты Powershell в существующий лист

Проблема: он всегда создает новый лист в книге.

Я хотел бы добавить данные на мой текущий лист и начать с A5 вместо верха. Вот что у меня есть

$source = 'C:\Scripts\monthly.csv' # source's fullpath 
$target = 'C:\Scripts\template.xlsx' # destination's fullpath 
$xl = new-object -com excel.application # creates Excel COM object in powershell 
$xl.displayAlerts = $false # don't prompt the user 
$wb2 = $xl.workbooks.open($source, $null, $true) # open source, readonly 
$wb1 = $xl.workbooks.open($target) # open target 
$sh1_wb1 = $wb1.sheets.item('triarqnew') # sheet in destination workbook 
$sheetToCopy = $wb2.sheets.item('monthly') # source sheet to copy 
$sheetToCopy.copy($sh1_wb1) # copy source sheet to destination workbook 
$wb2.close($false) # close source workbook w/o saving 
$wb1.SaveAs("C:\scripts\Report.xlsx") # close and save destination workbook 
$xl.quit() 
+0

с помощью '$ cell.item (1,1) = ' для конкретных ячеек так (не проверено) попробовать ' $ sheetToCopy.cells.item (1,5) .copy ($ sh1_wb1) ' –

+0

Не удалось выполнить метод копирования класса диапазона – Mike

ответ

0

Попробуй так с Copy() и PasteSpecial()

$source = 'C:\Scripts\monthly.csv' # source's fullpath 
$target = 'C:\Scripts\template.xlsx' # destination's fullpath 
$xl = new-object -com excel.application # creates Excel COM object in powershell 
$xl.displayAlerts = $false # don't prompt the user 
$wb2 = $xl.workbooks.open($source, $null, $true) # open source, readonly 
$wb1 = $xl.workbooks.open($target) # open target 
$sh1_wb1 = $wb1.sheets.item('triarqnew') # sheet in destination workbook 
$sheetToCopy = $wb2.sheets.item('monthly') # source sheet to copy 

# New code 
$sheetToCopy.UsedRange.Copy() 
$sh1_wb1.Range("A5").PasteSpecial() 

$wb2.close($false) # close source workbook w/o saving 
$wb1.SaveAs("C:\scripts\Report.xlsx") # close and save destination workbook 
$xl.quit() 
+0

Спасибо за ответ! Я попробовал это и получил «неудачный сценарий из-за переполнения глубины переадресации». Не уверен, где даже начать с этого. – Mike

+0

Я тестировал его на машине, и это сработало - в этом простом сценарии нет риска рекурсии, поэтому я думаю ваша проблема находится где-то в другом месте. Вы получили ошибку при попытке «точно» сценария выше или у вас есть другие вещи вокруг него? – DAXaholic

+0

Вот как выглядит весь код, ничего вокруг. Использование W2012R2 – Mike