导入然后导出CSV PowerShell

时间:2017-06-26 06:22:20

标签: excel powershell csv

我必须将结果导出到Excel表中,但所有内容都在一个单元格中。我想要一个包含列和行的表。

当前的Excel文件(Excel表格):

Column1      Column2    Column3     Column4
infra-12    infra-88    infra-52    infra-55
infra-2     infra-3     infra-2     infra-12
infra-8     infra-71    infra-45    infra-71
infra-45    infra-2     infra-3     infra-52
infra-3     infra-27    infra-99    infra-2

没有导出的输出(在PowerShell ISE中):

Column1  Column2  Column3  Column4 
-------  -------  -------  ------- 
infra-12 infra-88 infra-52 infra-55
infra-2  infra-71 infra-99 infra-71
infra-8  infra-27          infra-52
infra-45                           
infra-3 

当我在Excel表格中导出时(这是在表格中,所有内容都在一个单元格中):

Column1,"Column2","Column3","Column4"
infra-12,"infra-88","infra-52","infra-55"
infra-2,"infra-71","infra-99","infra-71"
infra-8,"infra-27",,"infra-52"
infra-45,,,
infra-3,,,

代码:

$csv = Import-Csv .\test1.csv -Delimiter ';'

$ref = [ordered]@{}
$columns = foreach ($i in 0..7) { ,[Collections.ArrayList]@() }

foreach ($row in $csv) {
    $value = $row.Column1
    $ref[$value] = $true
    $columns[0].add($value) >$null
}

foreach ($row in $csv) {
    $i = 1
    foreach ($col in 'Column2', 'Column3', 'Column4') {
        $value = $row.$col
        if (!$ref[$value]) {
            $columns[$i].add($value) >$null
        }
        $i++
    }
}

$maxLine = ($columns | select -expand Count | measure -Maximum).Maximum - 1
$csv = foreach ($i in 0..$maxLine) {
    [PSCustomObject]@{
        Column1 = $columns[0][$i]
        Column2 = $columns[1][$i]
        Column3 = $columns[2][$i]
        Column4 = $columns[3][$i]
    }
}


$csv | Export-CSV -Path ".\test1.csv" -NoTypeInformation

代码允许删除匹配(相同值)的单元格并显示其他单元格。

修改

当我使用以下分隔符时:

$ csv | Export-CSV -Path"。\ test3.csv" -NoTypeInformation -Delimiter","

Column1,"Column2","Column3","Column4"
,,,
,,,
,,,
,,,

使用另一个分隔符:

 $csv | Export-CSV -Path ".\test1.csv" -NoTypeInformation -Delimiter "`t"
"Column1    ""Column2"" ""Column3"" ""Column4"""
"infra-5    ""infra-7"" ""infra-9"" ""infra-2"""
"infra-1    ""infra-3"" ""infra-7"" "
"infra-4            "
"infra-8            "

我必须在我的脚本中导入文件,然后将输出导出到csv文件中,在本例中为Excel表格。

csv文件(Excel表格)中的预期结果:

    Column1  Column2  Column3  Column4 
    infra-12 infra-88 infra-52 infra-55
    infra-2  infra-71 infra-99 infra-71
    infra-8  infra-27          infra-52
    infra-45                           
    infra-3 

如果需要,我还可以将文件扩展名转换为xlsx或xls。

2 个答案:

答案 0 :(得分:1)

这听起来像是你可能正在使用非CSV格式在Excel中打开文件。在某些语言环境中,,被视为小数分隔符,Excel将默认为TSV加载文件。

要解决此问题,您可以使用数据标签中的Text Import Wizard 从文件导入。这将允许您选择适合您需要的分隔符(在您的情况下为, /逗号)并且应该可以成功运行。

从文档中引用:

  

第2步(共3个)(定界数据)

     

分隔符选择用于分隔文本文件中值的字符。如果未列出该字符,请选中“其他”复选框,然后在包含光标的框中键入该字符。如果您的数据类型是固定宽度,则这些选项不可用。

答案 1 :(得分:0)

为了得到预期的结果我已经用过了:

$csv | Export-CSV -Path ".\test1.csv" -NoTypeInformation -Delimiter ";"