Powershell CSV импорт в HTML в таблице

351
Klaus B

Я пытаюсь преобразовать CSV-файл в HTML с Powershell. Он занимает только последнюю строку в файле CSV, а не все строки.

Я новичок в PowerShell, поэтому надеюсь, что кто-то может мне помочь


$users = import-csv “C:\fso\names.csv” $Report = ForEach ($item in $users) { # I like to assign each property value to a simpler named variable, but it’s not necessary $firstName = $item.(“fornavn”) $lastName = $item.(“efternavn”) } $Report | ConvertTo-Html -Head $css -Body "<h1>Adresseliste</h1>`n<h5>Generated on $(Get-Date)</h5><table><tr><td><p>$firstname<p><td><p>$lastname</p></td></td></tr></table>" | Out-File "C:\fso\test.html" 
0
Обычно этот вопрос лучше подходит для StackOverflow, так как он не относится к области суперпользователя. Обычно вы найдете некоторую информацию о том, что по теме для Exchange в разделе справки. Если вы еще этого не сделали, возможно, не торопитесь, чтобы прочитать некоторые из них, например, как [как спросить] (https://superuser.com/help/how-to-ask). Это поможет вам получить лучшие и, возможно, более быстрые ответы. Seth 5 лет назад 0

2 ответа на вопрос

0
Seth

Вы никогда ничего не назначаете $Report. Вам нужно будет выполнить преобразование HTML в цикле. В настоящее время вы просматриваете каждый элемент, перезаписываете $firstNameи $lastNameс каждой итерацией. Вы заканчиваете цикл и имеете последнее значение в нем, чтобы использовать его для конечного результата.

Чтобы привести пример:

Предположим, вы хотите суммировать числа от одного до десяти, используя цикл. То, что вы сейчас делаете, это то, что следует.

$numbers = 1..10 $sum = 0 foreach($number in $numbers){ $sum = $number } Write-Output $sum 

Вы присваиваете сумму, которая у вас есть на данный момент, в качестве суммы. Что вы действительно хотите сделать в этом случае, так это добавить сумму к каждой итерации.

$numbers = 1..10 $sum = 0 foreach($number in $numbers){ $sum = $sum + $number } Write-Output $sum 

Что это значит для вашего кода? Вам нужно сгенерировать свой HTML внутри цикла. Ваш подход передачи выходных данных цикла foreach $repotпеременной может фактически использоваться для этого. В настоящее время он не генерирует никаких выходных данных, потому что вы просто выполняете присваивание (что, мы надеемся, не приведет к ошибке). Следующая модификация даст вам строку с выводом каждого имени и фамилии для каждого элемента. Вы можете использовать это для генерации вашего HTML. Альтернативный подход был бы аналогичным, используя $reportв качестве суммы добавление к ней каждой итерации.

$Report = ForEach ($item in $users) { $firstName = $item.(“fornavn”) $lastName = $item.(“efternavn”)  Write-Output $firstname,$lastName } 

PS имейте ввиду, что foreach и ForEach-Object это разные вещи. Вероятно, вы столкнетесь с последним чаще, особенно если вы используете сокращение %. Одним из основных отличий является то, что вы не можете использовать continueили breakвнутри последнего, но вместо этого нужно будет использовать другой механизм, как return.

0
Klaus B

Извините за мои глупые вопросы

Но теперь я могу напечатать все строки через запись-вывод, но я не могу заставить работать вывод html, можете ли вы помочь мне в правильном направлении?