Home > Software engineering >  Insert Data from CSV to HTML table using powershell
Insert Data from CSV to HTML table using powershell

Time:01-29

I am new to powershell and I want to insert the data from csv to html table which is I create separately. This is my csv

Sitename     EmailAddress
Test         [email protected]

Asking for help of how should I insert this data to my html table and then if I add data in csv it also automatically added on HTML table.

test.ps1 script

$kfxteam = Get-Content ('.\template\teamnotif.html') 
$notifteam = '' #result html
$teamlist = Import-Csv ".\list\teamlist.csv" | select 'SiteName','EmailAddress'
For($a=0; $a -lt $kfxteam.Length; $a  ) {
# If the "<table class=content>" matches on what written on $kfxteam it will show the result`
if($kfxteam -match "<table class=content >"){ 
    # should be replacing the data came from csv to html and also adding new row
write-host $teamlist[$a].SiteName      
}
}

html format

<<table class=content >
            <td class=c1 nowrap>
                Remote Sitenames
                </td>
                <td class=c1 nowrap >
                Users Email Address
                </td>
            </tr>
            <tr>
                <td class=c1 nowrap>
                usitename
                </td>
                <td class=c1 nowrap>
                [uemail]
                </td>
            </tr>
        </table>

The output html table should be

Remote Sitenames Email Address Test [email protected]

CodePudding user response:

If I were you, I'd change the HTML template file regarding the table to become something like this:

<table class=content>
<tr>
  <td class=c1 nowrap>Remote Sitenames</td>
  <td class=c1 nowrap>Users Email Address</td>
</tr>
@@TABLEROWSHERE@@
</table>

Now, you have a placeholder which you can replace with the table rows you create using the CSV file like:

# create a template for each of the rows to insert 
# with two placeholders to fill in using the -f Format operator
$row = @"
<tr>
  <td class=c1 nowrap>{0}</td>
  <td class=c1 nowrap>{1}</td>
</tr>
"@

# import the csv, loop over the records and use the $row template to create the table rows
$tableRows = Import-Csv -Path '.\list\teamlist.csv' | ForEach-Object {
    $row -f $_.Sitename, $_.EmailAddress
}

# then combine it all in the html
$result = (Get-Content -Path '.\template\teamnotif.html' -Raw) -replace '@@TABLEROWSHERE@@', ($tableRows -join [Environment]::NewLine)

# save the completed HTML
$result | Set-Content -Path '.\list\teamlist.html'
  •  Tags:  
  • Related