如何将PowerShell多维数组导出为格式规范的CSV文件?
PowerShell多维数组导出规范CSV的解决方案
你的问题出在当前代码把每个子数组整体作为单个属性值,导致Export-CSV将其合并到同一列。下面是两种可行的解决方法:
方法一:动态生成对应列的自定义对象
这种方法会根据多维数组的列数自动生成列名,确保每行元素分到不同单元格:
$dummy = @(("a","b","c"),("1","2","3"),("John","Jane","Smith")) # 根据第一行元素数量生成列名(如Column0、Column1、Column2) $columnNames = 0..($dummy[0].Count - 1) | ForEach-Object { "Column$_" } # 遍历每个子数组,生成带多列属性的自定义对象 $formattedObjects = $dummy | ForEach-Object { $currentRow = $_ $properties = [ordered]@{} for ($i = 0; $i -lt $columnNames.Count; $i++) { $properties[$columnNames[$i]] = $currentRow[$i] } [PSCustomObject]$properties } # 导出为规范CSV $formattedObjects | Export-CSV -Path "C:\folder\test.csv" -NoTypeInformation
方法二:手动指定列名(适合已知列含义的场景)
如果清楚每一列的实际意义,可以直接指定列名,代码更简洁:
$dummy = @(("a","b","c"),("1","2","3"),("John","Jane","Smith")) $formattedObjects = $dummy | ForEach-Object { [PSCustomObject]@{ '第一列' = $_[0] '第二列' = $_[1] '第三列' = $_[2] } } $formattedObjects | Export-CSV -Path "C:\folder\test.csv" -NoTypeInformation
关键说明
原代码中[PSCustomObject]@{ 'value' = $_ }会把整个子数组(比如("a","b","c"))作为value属性的单一值,Export-CSV会将其转换为字符串存入单个单元格。而上面的方法会把每个子数组的元素拆分到独立的属性中,对应CSV的不同列。
内容的提问来源于stack exchange,提问作者OnesQuared
相关产品推荐
相关产品推荐

