При конвертации Excel в CSV для пустых ячеек не приходят кавычки

Я пытаюсь импортировать файл 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.

Почему вы используете тег pwsh 4.0? вы действительно используете эту версию? если да, учтите, что возникшую у вас проблему невозможно воспроизвести в более новой версии.

Santiago Squarzon 01.07.2024 15:30

Если у вас нет очень неприятного программного обеспечения, читающего его в дальнейшем, то ,, — это наиболее компактное представление пустой ячейки в Excel (именно то, что присутствует в ваших исходных данных). Вам не нужно явно указывать строку нулевой длины в ее CSV-представлении. Кстати, вы действительно хотите, чтобы ваши числовые данные были импортированы в виде строк?

Martin Brown 01.07.2024 16:03

@MartinBrown - ymmv для других клиентов, но, кстати, Export-Csv и Import-Csv в любом случае рассматривают все данные как строки - ([pscustomobject] @{"col1"=100} | convertto-csv -> col`n"100" (с кавычками) и ("col1`n100" | convertfrom-csv).col1.gettype().FullName -> System.String. Я был удивлен, когда впервые попробовал это :-)

mclayton 01.07.2024 16:22
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
3
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваши «отсутствующие» значения подразумевают, что исходные данные $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, ни "" не отображают никаких печатных символов, но при их экспорте вы увидите желаемый результат.

Спасибо тебе за это. Для длинных файлов требуется некоторое время, но это нормально. Это работает сейчас

Sreepathi 02.07.2024 08:23

Другие вопросы по теме