我有一个带有用户名列表的csv
我想只导入csv文件的一个单元格,例如A2
是否可能具体?我试过谷歌搜索,但没有看到一个确切的解决方案。尝试过的PowerShell也有帮助。
可以这样做吗?
由于
Confuseis
答案 0 :(得分:1)
以下示例将仅选择并输出' cell'来自test.csv的A2
在此示例中,行A的列标题是'用户名'
$inFile = Import-Csv c:\Temp\test.csv
$targetCell = $inFile.username[1]
Write-Output $targetCell
此代码段正在执行以下操作:
答案 1 :(得分:1)
Import-CSV
从输入文件创建一个对象数组。 CSV第一行中的列标签成为属性名称。其他行是数组中的对象。像任何数组一样,您可以使用括号调用一个元素。
$arrUsers = Import-CSV c:\temp\users.csv
$arrUsers[1]
上面的第二个命令打印第二个对象,因为计数从0开始。这个对象来自CSV文件的第三行,因为第一个用作列标题。
如果您使用Get-Member
,它将显示对象的成员(属性和方法)。
$arrUsers | Get-Member
假设其中一个成员是username
,将其与数组索引相结合,您可以使用:
$arrUsers[1].username
Import-CSV
是一个非常灵活的工具。特别是与Foreach
和Export-CSV
结合使用。在Get-Help
和Get-Member
之间,您可以轻松探索Powershell。祝你好运。
答案 2 :(得分:1)
使用Import-Csv时,将内容转换为PSCustomObject。
下表中的示例:
PS> $csv = Import-Csv .\test.csv
PS> $csv
ProcessName Id WS CPU
----------- -- -- ---
sihost 5996 30015488 44.640625
pia_nw 11064 10620928 52.921875
pia_nw 2344 7933952 104.0625
RuntimeBroker 6500 77500416 177.34375
SettingSyncHost 6736 5074944 202.796875
explorer 6600 284934144 272.140625
ipoint 920 3162112 372.78125
rubyw 10648 18026496 389.46875
pia_nw 3108 31330304 1640.5625
OneDrive 10208 33206272 6422.4375
因此,您需要一个NoteProperty名称来调用您正在寻找的值。
PS> $csv.ProcessName[0]
sihost
另一种方法是制作一个标题数组并使用它来分割数据。
如果使用对象:
PS> $header = ($csv | ConvertTo-Csv -NoTypeInfo)[0] -replace '"' -split ",";
>>
PS> $header
ProcessName
Id
WS
CPU
或者如果使用文件:
PS> $header = (gc .\test.csv)[0] -replace '"' -split ',';
ProcessName
Id
WS
CPU
然后只使用适当的索引:
PS> $csv[0]."$($header[0])"
sihost
最后在xlsx文件上有Excel.Application ComObject方法。这将允许您选择单元格和范围。
PS> $file = "C:\Some\Path\IMade\Up\test.xlsx"
PS> $objExcel = New-Object -ComObject Excel.Application
PS> $objExcel.Visible = $false
PS> $wb = $objExcel.Workbooks.Open($file)
PS> $ws = $wb.Sheets.Item(1)
PS> $ws.Range("A2").Text
sihost
有关使用ComObjects的更多信息,请访问: Application Object (Excel)