В таблице, в которой есть столбцы с датами до и от, я выделяю перекрытия между строками с учетом периодов, это делается исчерпывающе во вложенных циклах. Это не проблема.
Мне нужен тот же цвет для строк, которые перекрываются.
sub highlight_overlaps {
my $date_from1;
my $date_to1;
my $date_from2;
my $date_to2;
my $i = 0;
my $j = 0;
for ($i; $i < $#DATE_HOLDER; $i++) {
$date_from1 = $DATE_HOLDER[$i][0];
$date_to1 = $DATE_HOLDER[$i][1];
my $red = int(rand(65)) + 190;
my $green = int(rand(290)) - 55;
my $blue = int(rand(290)) - 55;
for ($j=$i+1; $j<=$#DATE_HOLDER; $j++) {
$date_from2 = $DATE_HOLDER[$j][0];
$date_to2 = $DATE_HOLDER[$j][1];
if (($date_from1 le $date_to2 && $date_to1 ge $date_to2) ||
($date_from1 le $date_from2 && $date_to1 le $date_to2) ||
($date_from1 gt $date_from2 && $date_from1 lt $date_to2)) {
$tb->setCellStyle($i+2, 6, "background-color:rgb($red,$green,$blue);font-size:9pt");
$tb->setCellStyle($i+2, 7, "background-color:rgb($red,$green,$blue);font-size:9pt");
$tb->setCellStyle($j+2, 6, "background-color:rgb($red,$green,$blue);font-size:9pt");
$tb->setCellStyle($j+2, 7, "background-color:rgb($red,$green,$blue);font-size:9pt");
}
}
}
}
Это прекрасно работает, если это просто пара дат; говорят:
1) 25-06-2012 27-06-2012
2) 18-06-2012 29-06-2012
Получит тот же цвет
Если у меня есть
0) 26-06-2012 28-06-2012
1) 25-06-2012 27-06-2012
2) 18-06-2012 29-06-2012
0 получит другой цвет, в то время как 1 и 2 спарены, как задумано
Когда и как выбирать цвета, чтобы разные цвета применялись только к разным перекрытиям?
продолжение первого ответа; как я могу представить перекрытия, чтобы сохранить их в структуре данных, чтобы я мог их раскрасить после их обнаружения?