将CSV行复制到现有Excel工作表

时间:2016-12-19 16:24:30

标签: excel powershell

这应该很简单。我希望从my previous question(s)获取信息,这是一张CSV,并将它们放在现有的Excel文档中。

这里是现有数据(以CSV格式):

    SO       |    Status     |    ElapsedHrs
PMTT12345678    Hit on Debra          2.5
PMTS23456789    Get rejected          4.25
PMTT87654321   Send some faxes        1.0

所以我有一个现有的Excel工作表,其中所有SO类别需要从单元格6开始到列K,Status从6开始转到L并且ElapsedHrs去从单元格6开始到列O.

Using this以及其他一些例子,但我无法弄清楚语法。任何帮助再次受到赞赏。

修改

到目前为止,我有这个:

$Excel = New-Object -ComObject excel.application
$Excel.visible = $false
$WorkBook = $objExcel.Workbooks.Open($ExportCsv)
$WorkBook2 = $excel.Workbooks.open($Template)
$Worksheet = $Workbook.WorkSheets.item(“$ExpCsvShort”)

$ExportCsv是具有完整路径的CSV的名称。 $ExpCsvShort' is just the filename (the name changes based on the hour and date). $ Template`是要写入数据的模板.xslx文件。

$range = $WorkSheet.Range(“A2”).EntireColumn
$range.Copy() | out-null

不确定这应该是什么,因为我希望列A(减去标题)从6开始在$ Template上转到K.然后我希望C从L6和{{开始1}}从O6开始,但我不知道语法。

有了这个:

D

但同样,我也不知道这个范围的语法。

编辑2

这是我最终做的事情。

$Worksheet2 = $Workbook2.Worksheets.item(“Worklog”)
$worksheet2.activate()
$range2 = $Worksheet2.Range(“K6:K6”)
$Worksheet2.Paste($range2)
$workbook2.SaveAs($WorkLogSave)
$workbook.close($false)
$Excel.Quit()
 [gc]::collect()
 [gc]::WaitForPendingFinalizers()

可能是一种非常糟糕的方式,但它确实有效。此外,在所有内容关闭后,我仍然运行EXCEL.EXE。我已经阅读了5种杀死这个过程的方法,但是我担心如果我这样做会弄乱那些打开另一个文档的人,所以也许我可以$Excel = New-Object -ComObject excel.application $Excel.visible = $true $WorkBook = $excel.Workbooks.Open($ExportCsv) $WorkBook2 = $excel.Workbooks.open($Template) $Worksheet = $Workbook.WorkSheets.item($ExpCsvShort) $Worksheet.activate() #A Range Copy $rangeAc = $WorkSheet.Range(“A2:A26”) $rangeAc.Copy() | out-null #Select sheet 2 $Worksheet2 = $Workbook2.Worksheets.item(“Worklog”) $worksheet2.activate() #A Range Paste $rangeAp = $Worksheet2.Range(“K6:K30”) $Worksheet2.Paste($rangeAp) #C Range Copy $rangeCc = $WorkSheet.Range(“C2:C26”) $rangeCc.Copy() | out-null #C Range Paste $rangeCp = $Worksheet2.Range(“O6:O30”) $Worksheet2.Paste($rangeCp) #D Range Copy $rangeDc = $WorkSheet.Range(“D2:D26”) $rangeDc.Copy() | out-null #D Range Paste $rangeDp = $Worksheet2.Range(“L6:L30”) $Worksheet2.Paste($rangeDp) $workbook2.SaveAs($WorkLogSave) $workbook2.close($true) $workbook.close($true) $Excel.Quit() [gc]::collect() [gc]::WaitForPendingFinalizers() 抓住-passthru而是杀了那个,但我后来我会担心。

感谢所有人的帮助。

我喜欢使用那种引力,但我不确定我是怎么理解的。谢谢!

0 个答案:

没有答案