我有以下代码:
$databaseContents = "col1,col2,col3,col4"
$theDatabaseFile = "C:\NewFolder\Database.csv
$databaseContents | Out-File $theDatabaseFile
但是当我在Excel中打开csv文件时,它在单元格A1中有col1,col2,col3,col4而不是单元格A1中的col1,单元格B1中的col2等。
有点奇怪我注意到了: 如果我在记事本中打开文件并将文本复制到另一个记事本实例并将其保存为Database1.csv,然后在Excel中打开它,它将按预期显示。
如何将Out-File
命令行开关保存为.csv文件,其内容按预期方式列在4列中?
修改:
我注意到,如果我使用Set-Content
而不是Out-File
,则csv文件会在Excel中正确显示。
有谁知道这是为什么?
答案 0 :(得分:9)
为什么它对Excel有所影响我不清楚,但它归结为生成的输出文件的编码 - Unicode(在不起作用的情况下)与ASCII(在这种情况下)。
@ JPBlanc的替代方法有效,因为它将输出文件的编码设置为ASCII,其中原始示例(隐式)将输出文件的编码设置为Unicode。
只需将-Encoding ascii
添加到原始示例中也可以正常工作:
$databaseContents = "col1,col2,col3,col4"
$theDatabaseFile = "C:\NewFolder\Database.csv
$databaseContents | Out-File $theDatabaseFile -Encoding ascii
在原始示例中添加显式-Encoding unicode
会产生与您遇到的相同的损坏结果:
$databaseContents = "col1,col2,col3,col4"
$theDatabaseFile = "C:\NewFolder\Database.csv
$databaseContents | Out-File $theDatabaseFile -Encoding unicode
这基本上就是隐含的事情。
答案 1 :(得分:2)
这也有效:
$databaseContents = "col1;col2;col3;col4"
$theDatabaseFile = "C:\temp\Database.csv"
$databaseContents | Out-File $theDatabaseFile -Encoding ascii
默认情况下,Excel中的CSV分隔符接缝为';'并Out-File
另存为unicode强制ASCII
接缝以提供您要查找的结果。
答案 2 :(得分:1)
我遇到了与 Backwards_Dave 相同的问题,就像他一样,使用then()
代替Set-Content
命令为我工作:
Out-File
我尝试使用 JPBlanc 和 J0e3gan 的解决方案,但它不起作用(#Build $temp String
$temp = "$scriptApplication;$applicationName;$type;$description;$maxSessions;$enabled;$tempParams`n"
#Write $temp String to $fichierCsv file
"$temp" | Set-Content $fichierCsv
选项):我想知道这是为什么。