2016-08-23 3 views
0

ユーザー名のリストを持つCSVがあります。Import-csv Csvのターゲットセル

CSVファイルの1つのセルだけをインポートしたいとします。 A2

それは具体的なことは可能ですか?私はこれについてグーグルを試みたが、正確な解決策を見ていない。試したパワーシェルも助けます。

これはできますか?

おかげ

Confuseis

答えて

1

以下の例は、この例でのtest.CSV

から選択して出力のみ 'セル' A2であろうが、行Aの列ヘッダである 'ユーザ名'

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

このコードは、次のことをやっている:

  1. csvファイルをインポートして、PowerShellオブジェクトを生成します。
  2. 作業する列を選択すると、その列の項目を配列として扱うことができます。その列の目的の項目をゼロベースのインデックス値を参照して選択します。
  3. 結果を出力します。
+0

ユーザー名プロパティではなく、配列にインデックスを置きます。 '$ inFile [1] .username' – Xalorous

+0

実際、どちらの方法でも動作します。 $ infile.username [1]または$ infile [1] .usernameは同じ値を与えます。 –

1

Import-CSVは、入力ファイルからオブジェクトの配列を作成します。 CSVの最初の行にある列ラベルがプロパティ名になります。他の行は配列内のオブジェクトです。任意の配列と同様に、角かっこを使用して1つの要素を呼び出すことができます。最初は、列ヘッダーとして使用されたので、0のカウントを開始するが、このオブジェクトは、CSVファイルの3行目から来たので

$arrUsers = Import-CSV c:\temp\users.csv 
$arrUsers[1] 

第2のコマンドは、上記の、第2の目的を印刷します。

Get-Memberを使用すると、オブジェクトのメンバー(プロパティとメソッド)が表示されます。

$arrUsers | Get-Member 

メンバーの一人がusernameであると仮定すると、配列のインデックスと組み合わせる、あなたが使用することができます。

$arrUsers[1].username 

Import-CSVは、非常に柔軟なツールです。特にForeachExport-CSVとの組み合わせ。 Get-HelpGet-Memberの間でPowershellを簡単に探検できます。がんばろう。

+0

それは完璧なおかげです。 – Confuseis

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 

もう1つの方法は、ヘッダー配列を作成し、データをスライスすることです。

オブジェクトで作業している場合:

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メソッド。これにより、セルと範囲を選択できます。 ComObjectsを使用して上の

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 

詳細情報はここで見つけることができます: Application Object (Excel)

+0

それは非常に役に立ちました、ずっと簡単でした。私はそれがありがとうと思いました。 – Confuseis

+0

喜んで助けてくれました! – irThemis

関連する問題