Home > Software engineering >  how can add column in html table?
how can add column in html table?

Time:06-07

I have excel file(csv).ı calculate dateline product licence. and ı creating table with html. ı need add column calculated licence day. but ı cant do it. my ecxcell file like this; enter image description here. ı need 'product', 'bitis' and 'licence days(ı calculated with in foreach loop'.) But ı didnt do this. I need table with product,bitis and $licence. how can ı add $licence in table?

    $cInCsv = Import-Csv -Path $sInFile -Delimiter ";" -Encoding UTF7
$StartDate = Get-Date -UFormat "%d.%m.%Y"
$sDateFormat = "%d.%m.%Y"
$sInFile = "C:\Users\akilic\Desktop\tarihlerr.csv"

$header = @"
<style>
table {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
th {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;}
td {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}

</style>
"@


#Import-Csv -Path $sInFile -Delimiter ";" -Encoding UTF7 | Select product,bitis,gün | ConvertTo-Html -Head $header | Out-File "C:/Users/akilic/Desktop/health.html" 


Foreach ($ThisUser in $cInCsv)
{    

    $EndDate = Get-Date ($ThisUser.'bitis')
    $day = NEW-TIMESPAN –Start $StartDate  –End $EndDate
    $licence = $day.Days
    
    if( $licence -lt 90 -and $licence -gt 0){
       
      $ThisUser | Select-Object product,bitis, @{Name='gun'; Expression={$licence}} | Export-Csv "C:\Users\akilic\Desktop\test.csv" -Append -Force
    
    }

    if($licence -lt 0){

        $pos = [Math]::Abs($licence) 
        Write-Host $ThisUser.product " lisansı $pos gün geçmiştir"
        $ThisUser | Select-Object product,bitis,@{Name='gun'; Expression={$pos}} | Export-Csv "C:\Users\akilic\Desktop\test.csv"  -Append -Force
        
    }
} 

CodePudding user response:

You need to use datetime objects, not formatted strings.

Set $StartDate like this:

$StartDate = Get-Date  # a DateTime object, not a string

Then, inside the loop calculate the $EndDate from the 'bitis' column like this:

$EndDate = [datetime]::ParseExact($ThisUser.bitis, 'dd.MM.yyyy', $null)

Now you can create a TimeSpan using the DateTime objects $StartDate and $EndDate.

BTW. I would collect the data in a variable and afterwards save it all to CSV so you don't do so many disk writes appending to the file.

$result = foreach ($ThisUser in $cInCsv) {    
    $EndDate = [datetime]::ParseExact($ThisUser.bitis, 'dd.MM.yyyy', $null)
    $licence = (New-TimeSpan –Start $StartDate  –End $EndDate).Days

    if($licence -lt 90 -and $licence -gt 0) {
        # output the selected object to be collected in variable $result
        $ThisUser | Select-Object product,bitis, @{Name='gun'; Expression={$licence}}
    }
    elseif ($licence -lt 0){
        $pos = [Math]::Abs($licence) 
        Write-Host "$($ThisUser.product) lisansı $pos gün geçmiştir"
        $ThisUser | Select-Object product,bitis,@{Name='gun'; Expression={$pos}}
    }
}

# now write the result to csv file
$result | Export-Csv "C:\Users\akilic\Desktop\test.csv" -NoTypeInformation -Force

And/or create a HTML table from the data in $result


Oh yes, you need to swap these lines to read from the CSV file

$sInFile = "C:\Users\akilic\Desktop\tarihlerr.csv"
$cInCsv  = Import-Csv -Path $sInFile -Delimiter ";" -Encoding UTF7

CodePudding user response:

Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime." I take this error. Can you help me?

  • Related