第一次来这里,动力壳上的菜鸟,请保持温柔。
我有一个看起来像这样的CSV文件。
目标孔位置(标签),试剂(无体积),完整(成分+试管)ID
A1,RdRP,Sample1
B1,RdRP,Sample2
C1,RdRP,Sample3
D1,RdRP,Sample4
E1,RdRP,Sample5
我需要对其进行处理,以使其看起来像这样
行,列,*目标名称,*样本名称
A,1,RDRP,Sample1
B,1,RDRP,Sample2
C,1,RDRP,Sample3
D,1,RDRP,Sample4
E,1,RDRP,Sample5
然后是输出名称:blabla.csv。
我开始这样做:
$CVSOutput = '\test.csv'
$CVSInput = '\Export.csv'
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workbook = $excel.Workbooks.Open($CVSOutput)
$workbook.ActiveSheet.Cells.Item(1,1) = 'Row,Column,*Target Name,*Sample Name'
$Workbook2 = $excel.Workbooks.open($CVSInput)
$Worksheet = $Workbook2.WorkSheets.item(“Export”)
$Worksheet.activate()
$range = $WorkSheet.Range(“A2:A10”).CurrentRegion
$range.Copy() | out-null
$Worksheet2 = $Workbook.Worksheets.item(“test”)
$worksheet2.activate()
$range2 = $Worksheet2.Range(“A2:A10”)
$Worksheet2.Paste($range2)
$workbook.Save()
$workbook.close($false)
$Excel.Quit()
我完全有可能在错误的路径上实现即时消息,并尝试了更多。.其他人对此都有自己的想法。
答案 0 :(得分:2)
iRon's answer简洁明了,但在这种情况下,您的文件带有(而不是难看的)标题。 为了使转换此代码的代码对您更具可读性,建议您使用ForEach-Object循环转换输入数据。
类似
$result = Import-Csv -Path 'D:\Test\TheInputFile.csv' | ForEach-Object {
# -match creates $matches objects, in this case no. 1 --> Row letter(s) and no. 2 --> Column index
$null = $_.'Destination Well Position (Label)' -match '([a-z]+)(\d+)'
# output an object with the new columns and rename the others
$_ | Select-Object @{Name = 'Row'; Expression = {$matches[1]}},
@{Name = 'Column'; Expression = {$matches[2]}},
@{Name = 'Target Name'; Expression = {$_.'Reagents (no vol)'}},
@{Name = 'Sample Name'; Expression = {$_.'Full (Constituent + Tube) ID'}}
}
# output on screen
$result | Format-Table -AutoSize
# write to new csv
$result | Export-Csv -Path 'D:\Test\TheResult.csv' -UseCulture -NoTypeInformation
屏幕输出:
Row Column Target Name Sample Name
--- ------ ----------- -----------
A 1 RdRP Sample1
B 1 RdRP Sample2
C 1 RdRP Sample3
D 1 RdRP Sample4
E 1 RdRP Sample5
当然,您需要更改输入csv文件('D:\ Test \ TheInputFile.csv')和输出文件('D:\ Test \ TheResult.csv')的路径以匹配您的环境
我添加了开关-UseCulture
,因此输出csv中使用的定界符将与本地Excel期望的定界符相同。如果系统中的分隔符是逗号,则可以将其省略
答案 1 :(得分:0)
您无需为此使用Excel cmdlet:
$Test = ConvertFrom-CSV -Header RC,Target,Sample @'
A1,RdRP,Sample1
B1,RdRP,Sample2
C1,RdRP,Sample3
D1,RdRP,Sample4
E1,RdRP,Sample5
'@
$Test | Select-Object @{ n="Row"; e={ $_.RC -replace '\d' } },
@{ n="Column"; e={ $_.RC -replace '\D' } },
Target, Sample
Row Column Target Sample
--- ------ ------ ------
A 1 RdRP Sample1
B 1 RdRP Sample2
C 1 RdRP Sample3
D 1 RdRP Sample4
E 1 RdRP Sample5
说明:
@{ n="Row"; e={ $_.RC -replace '\d' } }
是Calculated properties -replace '\d'
列中的所有数字(RC
)并将其分配给新的"Row"
(n="Row"
)列答案 2 :(得分:0)
它改用VBscript解决。