Powershell Out-File не работает для CSV
У меня есть следующий код:
$databaseContents = "col1,col2,col3,col4"
$theDatabaseFile = "C:NewFolderDatabase.csv
$databaseContents | Out-File $theDatabaseFile
Однако, когда я открываю файл csv в Excel, он имеет col1, col2, col3, col4 в ячейке A1, а не col1 в ячейке A1, col2 в ячейке B1 и т. д.
Я заметил кое-что странное.:
Если я открою файл в блокноте и скопирую текст в другой экземпляр блокнота и сохраню его как Database1.csv, затем откройте его в Excel, он отображается, как и ожидалось.
Как я могу получить командлет Out-File, чтобы сохранить его как a .csv файл с содержимым в 4 столбцах как ожидали?
Править:
Я заметил, что если я использую Set-Content вместо Out-File, то csv-файл будет правильно отображаться в Excel.
Кто-нибудь знает, почему это происходит?
3 ответов:
Почему это имеет значение для 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Это в основном то, что было неявно происходит.
Это также работает:
$databaseContents = "col1;col2;col3;col4" $theDatabaseFile = "C:\temp\Database.csv" $databaseContents | Out-File $theDatabaseFile -Encoding asciiПо умолчанию CSV-разделитель в Excel seams должен быть '; ' и
Out-Fileсохранить как unicode, заставляяASCIIseams выдавать результат, который вы ищете.
У меня была та же проблема, что и у Backwards_Dave , и так же, как и он, использование команды
Set-Contentвместо командыOut-Fileработало для меня:#Build $temp String $temp = "$scriptApplication;$applicationName;$type;$description;$maxSessions;$enabled;$tempParams`n" #Write $temp String to $fichierCsv file "$temp" | Set-Content $fichierCsvЯ попробовал использовать JPBlanc и j0e3gan решение, но оно не сработало (
-Encoding asciiвариант): интересно, почему.

Comments