Csv上的Import-csv目标单元格

时间:2016-08-23 21:06:53

标签: powershell

我有一个带有用户名列表的csv

我想只导入csv文件的一个单元格,例如A2

是否可能具体?我试过谷歌搜索,但没有看到一个确切的解决方案。尝试过的PowerShell也有帮助。

可以这样做吗?

由于

Confuseis

3 个答案:

答案 0 :(得分:1)

以下示例将仅选择并输出' cell'来自test.csv的A2

在此示例中,行A的列标题是'用户名'

$inFile = Import-Csv c:\Temp\test.csv
$targetCell = $inFile.username[1]
Write-Output $targetCell

此代码段正在执行以下操作:

  1. 导入csv文件,生成PowerShell对象。
  2. 选择要使用的列,可以将该列中的项目视为数组。通过参考该零基于索引的值来选择该列中的所需项目。
  3. 输出结果。

答案 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是一个非常灵活的工具。特别是与ForeachExport-CSV结合使用。在Get-HelpGet-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)