Как сделать так, чтобы данные автоматически перемещались на новую страницу, если в php excel эти данные разделены? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть динамические данные. Так что мои данные могут измениться кроме того, у меня также есть подпись данных, которые не могут быть разделены. Эти данные подписи должны быть на той же странице. Посмотрите на красный знак на этом изображении:

enter image description here

Это единица и не может быть отделена. Данные подписи должен быть на той же странице

Моя проблема в том, что мои данные динамические. Это позволяет расположить данные подписи в любой позиции. Смотрите изображение ниже:

enter image description here

Поскольку мои данные увеличиваются, позиция директора в данных подписи является отдельной

Как мне сделать данные подписи (см. Рисунок 1), какие красные метки автоматически перемещаются на следующую страницу, если данные раздельные?

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете установить разрывы страниц вручную следующим образом:

<?php
//All lines are written from the sheet code at this moment 
//The code will insert a page break and the repeated header 

//Page margins
$sheet->getPageMargins()->setTop(0.5);
$sheet->getPageMargins()->setRight(0.75);
$sheet->getPageMargins()->setLeft(0.75);
$sheet->getPageMargins()->setBottom(1);

//Use fit to page for the horizontal direction
$sheet->getPageSetup()->setFitToWidth(1);
$sheet->getPageSetup()->setFitToHeight(0);

$headerItems = array(); //add your header items here as array
$headerRowsHeight = 0;// calculated height of header and images of the top
$rowCounter = 100; //get last written row

//add (other) modifier of page hight here

$pageHeight=25+50 + $headerRowsHeight; //Current used page height Header + Footer + $headerRowsHeight
$reset = $pageHeight; //If you will have the firstpage diffrent change reset value and/or pageheight
$pageMaxHeight = 980 ; //Maximale page height DIN A4 arround this
$pageClearance = 15; //Clearance of footer

//Iterate trough all written lines
for ($row = 1; $row <= $rowCounter; ++$row) {
    $height=15.1; //standard row height

    //get the row height 
    $dim = $sheet->getRowDimension($row)->getRowHeight();

    //get special cell heights (non standard)
    if($dim != -1){
        $height=$dim;
    }

    //add height for line to pageheight = get current used space
    $pageHeight = $pageHeight + $height;

    //Check if the space is still in the range of page 
    $leftOverSpace = $pageMaxHeight-$pageHeight;

    //Change $pageClearance  to your preferd space before footer
    if( $leftOverSpace < $pageClearance){
        //Set pagebraek
        $sheet->setBreak('A'.$row, \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_ROW);
        //Reset page height
        $pageHeight=$reset;
        //Add page header to new page
        createHeader($sheet, $row+1, $headeritems);
    }
}

//Creates a header for every page
function createHeader($sheet, $row, $texts){
    $count = $row;
    // Iterate trough the header text array
    foreach($texts as $text){
        //Insert a new line with header
        $sheet->insertNewRowBefore($count, 1);

        //Do your header stuff here
        $count++;
    }
    //Add two lines after the header
    $sheet->insertNewRowBefore($count, 2);
    //Return row number
    return $count;
}
?>

Не указывайте, что расчет не является точным на 100%, и вы должны адаптировать его к своему коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...