Абсолютно согласен с simply2double. Простой подсчет строк для разбивки страниц - очень уж ненадежный способ. Он обязательно сыграет с Вами злую шутку, как только потребуется динамически менять высоту строк, если выводимые данные перестанут влезать в одну строку.
Лично я делал примерно так: все разрывы, кроме последнего я отдавал "на откуп" Екселю, поскольку уж он-то лучше знает все свои параметры (высоту, поля и т.д.). А последний разрыв анализировал, а не разбил ли он мне Footer (тот самый блок подписей)? И не оторвал ли он мне последнюю строку от итогов? Или итоги от футера? Вобщем, если последний разрыв стоит не ДО ПОСЛЕДНЕЙ строки данных, то он меня не устраивает, и я вставляю принудительный разрыв именно ПЕРЕД ПОСЛЕДНЕЙ строкой.
При этом "родной" Екселевский разрыв благополучно исчезает сам! Честно говоря, не понимаю, почему у Вас этого не происходит... Только что проверил: даже при "ручном" редактировании Екселевской таблички все происходит очень корректно - при вставке принудит. разрыва, автоматический исчезает (или съезжает ниже, если "хвост" опять не помещается на странице.
Вот часть кода, который у меня обрабатывает последнюю страницу:
PHP код:
int pageBreakNum;
int lastPageBreakRow = 0;
int pageBreakRow = -1;
;
lastLineRowNum = ...// здесь определяем номер последней строки,
// которая должна обязательно попасть на посл. страницу
...
// найдем последний разрыв страницы
for (pageBreakNum = 1; pageBreakRow != 0; pageBreakNum++)
{
lastPageBreakRow = pageBreakRow;
pageBreakRow = document.getHPageBreak(pageBreakNum);
}
if(lastPageBreakRow > lastLineRowNum)
{
document.insertPageBreak(ComExcelDocument_RU::numToNameCell(1, lastLineRowNum));
}
...