如何将html单元格与powershell脚本合并

时间:2018-01-28 19:30:37

标签: html powershell merge

我正在尝试使用CSV作为源创建一个html表,这需要一些格式,包括基于单元格值添加颜色,如果值与下一行相同,则合并第一列。

然而, 1.颜色部分有效 2.合并部分不起作用。没有错误,但没有任何东西被合并。

有人可以帮忙检查吗?

$file = import-csv I:\SCRIPT\IPCNewScript\BackupCode\ResultFinal.csv


$HTMLBody += "<span style='font-family:Courier New;font-size:12pt'>"   # Due to blank space problem


$head = @'
<title>Table</title>
<style>
body { background-color:#E5E4E2;
       font-family:Monospace;
       font-size:10pt; }
td, th { border:0px solid black; 
         border-collapse:collapse;
         white-space:pre; }
th { color:white;
     background-color:black; }
table, tr, td, th { padding: 2px; margin: 0px ;white-space:pre; }
tr:nth-child(odd) {background-color: lightgray}
table { width:95%;margin-left:5px; margin-bottom:20px;}
h2 {
 font-family:Tahoma;
 color:#6D7B8D;
}
.warning {
 color: orange; 
 }
 .issue {
 color: red; 
 }
 .mergecol {
 rowspan="2";
 }
</style>
'@



[xml]$html = $file | convertTo-Html -fragment -As table



for ($j=4; $j -le $html.table.tr[1].td.count-1; $j++){
    if(($html.table.tr[1].td[$j] -as [string]) -eq "Sun" ){ 
        for ($i=2; $i -le $html.table.tr.count-1; $i++){
            $class = $html.CreateAttribute("class")
            $class.value = 'warning'
            $html.table.tr[$i].ChildNodes[$j].Attributes.append($class) | out-null
        }
    } 
    else {
        for ($i=2; $i -le $html.table.tr.count-1; $i++){
            if (($html.table.tr[$i].td[$j] -as [int]) -eq 0){
                 $class = $html.CreateAttribute("class")
                 $class.value = 'issue'
                 $html.table.tr[$i].ChildNodes[$j].Attributes.append($class) | out-null
            }
        }
    }}

    #merge column
    for ($i =1; $i -le $html.table.tr.count-2; $i++){
        if (($html.table.tr[$i].td[0] -as [string]) -eq  ($html.table.tr[$i+1].td[0] -as [string]))
        {
            $class = $html.CreateAttribute("class")
            $class.value = 'mergecol'
            $html.table.tr[$i].ChildNodes[0].Attributes.append($class) | out-null 
            $i++
         }
    }
    convertto-html -head $head -body $($html.innerxml) | out-file "I:\SCRIPT\IPCNewScript\BackupCode\final28.htm"

1 个答案:

答案 0 :(得分:0)

我已经清理了你的问题中的代码(缩进等)。

在迭代表元素的循环中存在一些可疑的逻辑。 $j内循环中没有#merge column的引用。这两个循环似乎没有关系,为什么它们嵌套?

您在ConvertTo-HTML上的每次迭代时都会调用$j,这似乎很值得怀疑。

for ($j=4; $j -le $html.table.tr[1].td.count-1; $j++){
    <# Colorizing code removed for clarity #>

    <# Do you really want to merge columns on every iteration over $j? #>
    #merge column
    for ($i =1; $i -le $html.table.tr.count-2; $i++){
        if (($html.table.tr[$i].td[0] -as [string]) -eq  ($html.table.tr[$i+1].td[0] -as [string]))
        {
            $class = $html.CreateAttribute("class")
            $class.value = 'mergecol'
            $html.table.tr[$i].ChildNodes[0].Attributes.append($class) | out-null 
            $i++
         }
    }
    <# Do you really want to ConvertTo-HTML on every iteration over $j? #>
    convertto-html -head $head -body $($html.innerxml) | out-file "I:\SCRIPT\IPCNewScript\BackupCode\final28.htm"
}