2017-05-24 9 views
0

類似の製品とその横の各製品の数量を持つCSVファイルがあります。 CSVからPowershellを使用してExcelでデータを検索して追加する

サンプルは、私は、すべての同様の製品#Sを見つける彼らの数量を追加し、新しい行にそれぞれ類似した製品の合計を配置する方法が必要

Qty Ordered   Product/Item Description Top row (header) 
    7    Product1 
    3    Product2 
    5    Product1 
    3    Product3 

ファイル。

Add-Type -AssemblyName System.Windows.Forms 
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property 
@{ 
Multiselect = $false # Multiple files can be chosen 
Filter = 'Excel (*.csv, *.xlxs)|*.csv;*.xlsx' # Specified file types 
} 

[void]$FileBrowser.ShowDialog() 

$file = $FileBrowser.FileNames; 




[Reflection.Assembly]::LoadWithPartialName 
("Microsoft.Office.Interop.Excel")|Out-Null 
$excel = New-Object Microsoft.Office.Interop.Excel.ApplicationClass 
$excel.Visible = $true 
$wb = $excel.Workbooks.Open($file) 
$ws = $wb.ActiveSheet 
$c = $ws.Columns 
$c.Item(2).hidden = $true 

このコードでは、csvファイルを選択するように指示し、不要な列を非表示にして重要な列のサイズを自動的に変更します。

+1

これまでに何を試しましたか? csvファイルをExcelにインポートしましたか?あなたはどのようなコードを結んでいますか? –

+0

はい、私はそれをExcelで動作させることができますが、サプライヤがcsv形式で1日あたりの注文を送信しているので、powershellで動作させる必要があります。私たちのパッケージングのために一括して製品の量を増やすことができるスクリプトを用意することは非常に有益です。 – redwing88

+1

質問を編集してコードを追加してください。正しくフォーマットされているようにしてください。 – BenH

答えて

1

ExcelをCOMオブジェクトとして使用するのではなく、Import-CSVを使用してからGroup-Objectを使用できます。必要な情報をグループごとに繰り返します。

Add-Type -AssemblyName System.Windows.Forms 
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    Multiselect = $false # Multiple files can be chosen 
    Filter = 'Excel (.csv, *.xlxs)|.csv;*.xlsx' # Specified file types 
} 
[void]$FileBrowser.ShowDialog() 
ForEach ($file in $FileBrowser.FileNames) { 
    $CSV = Import-CSV $file | Add-Member -Name Total -Value 0 -MemberType NoteProperty 
    $Groups = $CSV | Group-Object "Product/Item Description" 
    $NewCSV = Foreach ($Group in $Groups) { 
     $Count = 0 
     $Group.Group."Qty Ordered" | ForEach-Object {$Count += $_} 
     Foreach ($value in $CSV) { 
      If ($value."Product/Item Description" -eq $Group.Name) { 
       $value.Total = $Count 
       $value 
      } 
     } 
    } 
    Export-CSV "$filenew" -NoTypeInformation 
} 
関連する問題