我正在尝试使用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"
答案 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"
}