Сценарий Powershell для преобразования .csv в. html и обработки нескольких файлов - PullRequest
0 голосов
/ 13 июля 2020

Мне нужно написать сценарий, который берет содержимое нескольких файлов .csv и записывает их в один. html файл. Цель состоит в том, чтобы видеть все имена файлов как кнопки и иметь возможность расширять кнопки, чтобы увидеть содержимое.

Моя проблема в том, что я не знаю, как дать data-target и div id правильное имя для каждый файл.

Думаю, вы уже поняли, что мои навыки написания сценариев ... очень и очень ограничены, но вот моя попытка:

$in = "C:\clientlist\*"
$out = 'C:\clientlist\test.html'

$head = @"
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
"@
$Pre = @"
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#demo">Filename</button>
<div id="demo" class="collapse">
"@
$Post = @"
</p></div>
"@
$Head | Out-File -filepath $out
$List = Get-ChildItem $in -Filter *.csv
$User =  $List |
ForEach-Object {Import-Csv $_ | Select-Object | convertto-html -fragment -precontent $pre -postcontent $post}
$User | Out-File -filepath $out -append

Любая помощь будет очень признательна, и если Вам нужна дополнительная информация, просто сообщите мне!

1 Ответ

0 голосов
/ 13 июля 2020

Вы близко! Что вам нужно сделать, так это определить строку $Pre внутри ForEach-Object l oop. Select-Object, который вы делаете между ними, бесполезен, если вы не хотите выбрать подмножество данных CSV для вывода.

Что-то вроде этого должно сработать:

$Head | Out-File -filepath $out -Encoding utf8
$List = Get-ChildItem $in -Filter *.csv -File | ForEach-Object {
    $name = $_.BaseName
    $id = '{0}_{1}' -f $name, (Get-Date).Ticks  # to make this id unique, append the Ticks to the name

    $Pre = @"
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#$id">$name</button>
<div id="$id" class="collapse">
"@
    $Post = '</p></div>'
    Import-Csv -Path $_.FullName | ConvertTo-Html -Fragment -PreContent $pre -PostContent $post | 
    Out-File -FilePath $out -Encoding utf8 -Append
}

Альтернатива можно создать ваш $Pre как шаблон, включая заполнители {0} и {1}, и заполнить имя и идентификатор внутри ForEach l oop с помощью оператора формата -f:

$Head | Out-File -filepath $out -Encoding utf8

$Pre = @'
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#{0}">{1}</button>
<div id="{0}" class="collapse">
'@
$Post = '</p></div>'

$List = Get-ChildItem $in -Filter *.csv -File | ForEach-Object {
    $name = $_.BaseName
    $id = '{0}_{1}' -f $name, (Get-Date).Ticks  # to make this id unique, append the Ticks to the name
    # use the $Pre template to fill in the placeholders
    $precontent = $Pre -f $id, $name

    Import-Csv -Path $_.FullName | ConvertTo-Html -Fragment -PreContent $precontent -PostContent $post | 
    Out-File -FilePath $out -Encoding utf8 -Append
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...