2016-11-16 49 views
-2

也许有人可以帮助我。我正在尝试使用标题从CSV生成一个清单框。然后只有出口cvs的标题和数据在该列我检查Powershell,CSV和Checklistbox

头和字段的数量会随着我使用不同的CVS而改变,所以我不能硬编码它。

目前我使用的是填充在checklistbox报头中的后续代码,但它会产生以下

名称,种类,年龄,品种,次出手全部在一行

Get-Content $list | select -First 1 

显示

我想要做的是在这样的复选框旁边生成名称

名称 种类 年龄 品种 镜头

然后我可以继续获取支票领域以出口CSV。由于时间提前

#####################

的出落得是程序正是我期待的谢谢。但我现在面临的问题是尝试将其整合到程序中,我希望它是一个线路修复程序,整个问题非常大,但这是我遇到的问题。这里是原来的代码

这部分将加载CSV

$MasterBtn_Click={ 
if($openfile.ShowDialog() -eq 'OK') 
{ 
    $MasterTxT.Text = $openfile.FileName 
    $MasterLT = $MasterTxT.Text 
} 

$labelFormHeaders.Text = Get-Content $MasterLT | select -First 1 
} 

这部分进行比较,并导出我的选择

$buttonStartProcess_Click={ 

$script:CancelLoop = $false 
$buttonCancelProcess.Enabled = $true 

$this.Enabled = $false 

$progressbar1.Value = 0 

for($i = 0; $i -lt $progressbar1.Maximum; $i++) 
{ 
    #---------------------------------------- 


    $col1 = $textbox1.text 
    $col2 = $textbox2.text 
    $col3 = $textbox3.text 
    $col4 = $textbox4.text 
    $col5 = $textbox5.text 
    $col6 = $textbox6.text 

    $list = $EventLt 
    $Data = $MasterLT 


$Userlist = Import-csv -path $list 
$userData = Import-Csv -Path $Data 
$UserOutput = @() 

$Result = "C:\Temp\Results1.csv" 


ForEach ($name in $UserList) 
{ 

    $userMatch = $UserData | where {$_.ID -eq $name.usernames} 
    If($userMatch) 
    { 
     # Process the data 

     $UserOutput += New-Object PsObject -Property @{ID  =$name.usernames; "$col1" = $userMatch.$col1; "$col2" =$userMatch.$col2; "$col3" =$userMatch.$col3;"$col4" =$userMatch.$col4;"$col5" =$userMatch.$col5;"$col6" =$userMatch.$col6} # 

    } 
    else 
    { 
     $UserOutput += New-Object PsObject -Property @{ID =$name.usernames; "$col1" ="NA";"$col2" ="NA";"$col3" ="NA";"$col4" ="NA";"$col5" ="NA";"$col6" ="NA"} 
    } 


} 
$UserOutput | Select-Object "ID","$col1","$col2","$col3","$col4","$col5","$col6" | Export-Csv -Path $Result -NoTypeInformation 

    sleep -Milliseconds 200 



    [System.Windows.Forms.Application]::DoEvents() 

    if($script:CancelLoop -eq $true) 
    { 

     $progressbar1.Value = 0 

     break; 
    } 
    r 
    $progressbar1.PerformStep() 
} 


$this.Enabled = $true 
$buttonCancelProcess.Enabled = $false 
} 

目前我有一大堆的文本框,我将不得不手动输入标题。我想消除这一点,并有一个生成的复选框列表,当一个框是检查,我打“$ buttonstartprocess”它将拉动这些选项从复选框,并给我我想要的行。希望我不会失去任何人。再次感谢。

+0

听起来像名称,物种,...是一系列字段名称(列名称)。这是你想从CSV文件中找出什么?如果是这样,我有一个工具,我会发布,解决了一个稍微不同的问题,但包含代码,你可能会适应。 –

回答

0

这样的事情?

#get list of header 
$headerlist=import-csv C:\temp\resul2.csv | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty 'Name' 

[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null 
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null 

#create form 
$Form = New-Object System.Windows.Forms.Form  
$Form.Size = New-Object System.Drawing.Size(600,400) 
$Form.text ="Form test" 

#create groupbox for list checkbox 
$groupBox = New-Object System.Windows.Forms.GroupBox 
$groupBox.Location = New-Object System.Drawing.Size(240,20) 
$groupBox.text = "You checkbox items" 
$Form.Controls.Add($groupBox) 

$Checkboxes += New-Object System.Windows.Forms.CheckBox 
$Checkboxes.Location = New-Object System.Drawing.Size(10,20) 

#add checkbox list 
$Checkboxes = @() 
$y = 20 
foreach ($a in $headerlist) 
{  
    $Checkbox = New-Object System.Windows.Forms.CheckBox 
    $Checkbox.Text = $a 
    $Checkbox.Location = New-Object System.Drawing.Size(10,$y) 
    $y += 30 
    $groupBox.Controls.Add($Checkbox) 
    $Checkboxes += $Checkbox 
} 
$groupBox.size = New-Object System.Drawing.Size(200,(40*$checkboxes.Count)) 

#show result 
$form.ShowDialog()| Out-Null 
+0

出来的程序正是我要找的谢谢。但我现在面临的问题是尝试将其整合到程序中,我希望它是一个单行的修复程序,整个问题非常大,但这是我遇到的问题 – user2457713