PowerShell将Excel转CSV时为空单元格添加双引号的方法
解决PowerShell Excel转CSV时空单元格无双引号的问题
问题原因
Import-Excel读取Excel空单元格时会返回$null,而Export-Csv默认对$null值输出连续逗号(无引号),但对空字符串""会输出带双引号的"",这就是当前输出和期望的差异所在。
解决方案
通过预处理读取到的Excel数据,将所有$null值替换为空字符串,再导出CSV即可实现需求:
方法一:遍历对象属性替换
# 读取Excel文件 $excelData = Import-Excel c:\users\xxxx\TestFile.xlsx # 遍历每条数据,将所有$null属性转为空字符串 $processedData = $excelData | ForEach-Object { # 获取当前对象的所有属性名 $propertyNames = $_ | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name foreach ($prop in $propertyNames) { if ($null -eq $_.$prop) { $_.$prop = "" } } # 返回处理后的对象 $_ } # 导出为CSV $processedData | Export-Csv c:\users\xxx\CSVFile.csv -NoTypeInformation -Encoding UTF8
方法二:使用计算属性批量处理
# 读取Excel文件 $excelData = Import-Excel c:\users\xxxx\TestFile.xlsx # 获取数据的所有属性名 $propertyNames = $excelData[0] | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name # 用计算属性替换所有$null值为空字符串,再导出 $excelData | Select-Object @( foreach ($prop in $propertyNames) { @{ Name = $prop Expression = { if ($null -eq $_.$prop) { "" } else { $_.$prop } } } } ) | Export-Csv c:\users\xxx\CSVFile.csv -NoTypeInformation -Encoding UTF8
执行上述任意一种方法后,导出的CSV中空单元格都会被格式化为"",符合你的期望输出。
内容的提问来源于stack exchange,提问作者Sreepathi
相关产品推荐
相关产品推荐

