Выгрузка в excel с группировкой в виде дерева на php

Для работы с таким форматом рекомендую использовать phpExcel
Мне нужно было сделать такое

В качестве основы, я использовала информацию от сюда https://phpexcel.codeplex.com/discussions/281289

$i=2;
while($i<50)
{

    $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "A test".$i);
    $objPHPExcel->getActiveSheet()->getRowDimension($i)->setOutlineLevel(1);
    $objPHPExcel->getActiveSheet()->getRowDimension($i)->setCollapsed(false);
    $i++;

    for($j=0;$j<5;$j++)
    {
        $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, "B test".$i);
        $objPHPExcel->getActiveSheet()->getRowDimension($i)->setOutlineLevel(2);
        $objPHPExcel->getActiveSheet()->getRowDimension($i)->setCollapsed(false);
        $i++;

        for($k=0;$k<5;$k++)
        {
            $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, "C test".$i);
            $objPHPExcel->getActiveSheet()->getRowDimension($i)->setOutlineLevel(3);
            $objPHPExcel->getActiveSheet()->getRowDimension($i)->setCollapsed(false);
            $i++;
        }
    }
}

setCellValue(<адрес ячейки>, <значение>);
setOutlineLevel(<уровень глубины>);
setCollapsed - признак можно ли схлапывать схлопнуто или нет

Но тут есть ошибка, о которой писал автор, но как в этом коде его исправить, я даже не думала, я просто написала свой, который требуется по задаче. Публикую, может кому поможет для его решения..


    public function wrxlsx($id_site,$id_parent,$level=0)
    {
        $links = $this->get_childs($id_site,$id_parent); //получить массив данных для .xlsx
        if(!$links)
            return;

        $colNumber = $level;
        $level++;
        foreach($links as $l)
        {
            $this->curRow++;
            $value = $l['name'].' -> '.$l['uri'];
            $colString = PHPExcel_Cell::stringFromColumnIndex($colNumber);
            
            $this->objPHPExcel->getActiveSheet()->setCellValue($colString . $this->curRow, $value);
            $this->objPHPExcel->getActiveSheet()->getRowDimension($this->curRow)->setOutlineLevel($level);
            //первый уровень не схлапываем
            $this->objPHPExcel->getActiveSheet()->getRowDimension($this->curRow)->setVisible($level==1?true:false);
            $this->objPHPExcel->getActiveSheet()->getRowDimension($this->curRow)->setCollapsed(true);

            $this->wrxlsx($id_site,$l['id'],$level);
        }
    }


О том, как сохранить в файл и подключить библиотеку не пишу, это легко найти в интернете. Написала только о том, что у меня вызвало трудность найти и разобраться как работает.

Комментарии

  1. Отменить "итоги в строках под данными", чтобы плюсики были вверху, что удобнее на мой взгляд. Думаю кому то будет интересно.
    $objPHPExcel = new PHPExcel();
    $objPHPExcel->getActiveSheet()->setShowSummaryBelow(false);

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения