CSV和XLSX有什么区别?

我试图用Excel表格在输出中获得一些列表,但是人们告诉“这与CSV使用不一样,因为每行都是一个单独的对象”,“使用列表来获得你想要的输出”,并且它复杂化因为我现在不知道该怎么做。 我正在使用PowerShell。 有人可以解释我与XLSX和CSV实用程序与导入的差异如果可能的话? 我看了一些文档,但没有帮助我理解。

$csv = Import-Csv .\test1.csv -Delimiter ';' $ref = @($csv.Column1) foreach ($row in $csv) { foreach ($col in 'Column2', 'Column3', 'Column4') { if ($ref -contains $row.$col) { $row.$col = '' } } } $csv | Select-Object Column1,Column2,Column3,Column4 | where Column1 -ne '' $csv | Select-Object Column1,Column2,Column3,Column4 | where Column2 -ne '' 

预期的产出

 Column1 Column2 Column3 Column4
 ------- ------- ------- -------
在下文中,在下文中是在下文中
在下面的62下面-85下面的8-infra-23
         在下面的8下面-852
          55以下 -  70


 Column1 Column2 Column3 Column4
 ------- ------- ------- -------
在下面的下面-85下面的-2下面-99
红外-98红外-55红外-44红外-23
 infra-2 infra-1 infra-10
在下面62下 

当您使用Import-CSV cmdlet导入.CSV时,上一个问题会丢失上下文。 然后,CSV的每一行成为一个PowerShell对象。 如果使用ImportExcel模块导入XLSX,情况也是如此。 该结构不再与CSV文件或XLSX文件相同。 它不再是一个电子表格,而是一个对象的集合。

以简单的.CSV文件

 Col1,Col2 a,b c,a 

如果您要使用Import-CSV PowerShell导入它,那么您将得到一个由两个对象组成的数组。 这可能是更好的照片是这样的:

 @( [pscustomobject]@{ Col1 = 'a' Col2 = 'b' } [pscustomobject]@{ Col1 = 'c' Col2 = 'a' } ) 

所以它是两个独立的对象,具有来自列标题的属性。

如果您将其中一个对象的属性设置为空string,那么当您导出并将对象转回到行时。 你将有一个空的“细胞”。

如何解决这个问题就是以单个数组的forms读取列,然后对这些数组执行比较逻辑,然后从这些更新的数组中创build一个全新的对象集合,然后导出。 其他人在其他问题上回答了哪些问题。