Я пытаюсь импортировать файл Excel в формат CSV через Power Shell, используя эту команду
import-excel c:\users\xxxx\TestFile.xlsx | export-csv c:\users\xxx\CSVFile.csv -NoTypeInformation -Encoding UTF8
Он работает нормально, но проблема в том, что значение столбца пусто, поэтому двойные кавычки не появляются.
Пример вывода: -
"98456","Millan, Don K","Millan","Don","K",,"MD","SPECIALISTS","UROLOGY",,,,"0-99",,
Требуемый вывод: -
"98456","Millan, Don K","Millan","Don","K","","MD","SPECIALISTS","UROLOGY","","","","0-99","",""
Мои входные данные Excel такие, как показано ниже.
Итак, есть ли способ получить кавычки для всех пустых ячеек при преобразовании в CSV в PowerShell.
Если у вас нет очень неприятного программного обеспечения, читающего его в дальнейшем, то ,, — это наиболее компактное представление пустой ячейки в Excel (именно то, что присутствует в ваших исходных данных). Вам не нужно явно указывать строку нулевой длины в ее CSV-представлении. Кстати, вы действительно хотите, чтобы ваши числовые данные были импортированы в виде строк?
@MartinBrown - ymmv для других клиентов, но, кстати, Export-Csv и Import-Csv в любом случае рассматривают все данные как строки - ([pscustomobject] @{"col1"=100} | convertto-csv -> col`n"100" (с кавычками) и ("col1`n100" | convertfrom-csv).col1.gettype().FullName -> System.String. Я был удивлен, когда впервые попробовал это :-)


Ваши «отсутствующие» значения подразумевают, что исходные данные $null для этих свойств:
PS> [pscustomobject] @{
"col1" = "val1"
"col2" = $null
# ^^^^^ null value
"col3" = "val3"
} | convertto-csv
который выводит
"col1","col2","col3"
"val1",,"val3"
# ^^ no content
Если вы хотите, чтобы на выходе была пустая строка в кавычках, вам нужно поместить это значение в данные:
PS> [pscustomobject] @{
"col1" = "val1"
"col2" = ""
# ^^ empty string
"col3" = "val3"
} | convertto-csv
который затем выводит:
"col1","col2","col3"
"val1","","val3"
# ^^ empty string
Итак, после того, как вы импортировали свои данные с помощью import-excel, переберите все результаты и измените все значения $null на "" перед вызовом команды экспорта-csv:
$data = import-excel c:\users\xxxx\TestFile.xlsx
foreach( $item in $data }
{
foreach( $property in $item.psobject.properties )
{
if ( $null -eq $property.Value )
{
$property.Value = ""
}
}
}
$data | export-csv c:\users\xxx\CSVFile.csv -NoTypeInformation -Encoding UTF8
Результат может не отличаться, если вы отобразите значения свойств на экране до и после их изменения, поскольку ни $null, ни "" не отображают никаких печатных символов, но при их экспорте вы увидите желаемый результат.
Спасибо тебе за это. Для длинных файлов требуется некоторое время, но это нормально. Это работает сейчас
Почему вы используете тег pwsh 4.0? вы действительно используете эту версию? если да, учтите, что возникшую у вас проблему невозможно воспроизвести в более новой версии.