PHPSpreadsheet 折叠分组行

PHPSpreadsheet collapsing for grouped rows

我试图在 Excel 文件(使用 PHPSpreadsheet)中创建 3 个大纲级别,它是这样填充的:

$worksheet=$spreadsheet->getActiveSheet();
$colCount=$stmt->columnCount();
$rowNo=$worksheet->getHighestRow() + 1;
$object =  (object) $arrFinal;
foreach ($object as $row)
        {
            $colNo = 0;
            foreach ($row as $element)
            {
                if ($colNo < 6)
                {
                    //nothing to do here now
                }
                else
                {
                    $worksheet->getRowDimension($rowNo)->setOutlineLevel(0)->setVisible(false)->setCollapsed(true);
                    if (($colNo == 28) && ($row['AcceptDate'] != ''))
                    {
                        $value = date('d.m.Y', strtotime(substr($row['AcceptDate'],0,10)));
                    }
                    else
                        $value=$element;

                    if (is_null($value)) $value=''; $worksheet->setCellValueByColumnAndRow($colNo-5,$rowNo,$value);
                    if ($row['Level'] == 2)
                    {
                        $worksheet->getRowDimension($rowNo)->setOutlineLevel(1)->setVisible(false)->setCollapsed(true);
                        $worksheet->getStyle('A'.$rowNo)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                    }
                    if ($row['Level'] == 2 || $row['Level'] == 1)
                    {
                        $worksheet->getStyle('A'.$rowNo)->getAlignment()->applyFromArray( [ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER] );
                    }
                    if ($row['Level'] == 3)
                    {
                        $worksheet->getRowDimension($rowNo)->setOutlineLevel(2)->setVisible(false)->setCollapsed(true);
                        $worksheet->mergeCells('A'.$rowNo.':O'.$rowNo);
                        $worksheet->mergeCells('Q'.$rowNo.':Z'.$rowNo);
                    }
                }
                $colNo++;
            }
            $rowNo++;
        }

    $spreadsheet->getActiveSheet()->setAutoFilter(sprintf("A4:%s%d",Coordinate::stringFromColumnIndex($colCount-6),$rowNo-1));

除一件事外一切正常 - 当我在填充数据后检查文件时,这些行组没有隐藏和折叠。但是,如果我这样做:

$worksheet->getRowDimension(1)->setOutlineLevel(0)->setVisible(false)->setCollapsed(true);

紧接着

$spreadsheet=IOFactory::createReader('Xlsx')->load('templates/FB.xlsx');

它按预期工作。 我在这里做错了什么?试图搜索类似的问题,但没有找到对此类情况有帮助的解释。可能漏掉了什么。

P.S。为原始测试用例添加了一些代码 (setAutoFilter)。

也许不在结果中创建行更容易 excel。 也许 Filter 就是您正在寻找的解决方案。请注意,每个工作表可能只有一个过滤器。 PHPSpreeadsheet 不支持 pivot tables 和自动 table 格式。

好吧,我的错,没有意识到我在数据填充后有 setAutoFilter,这覆盖了 foreachsetVisible(false)->setCollapsed(true) 使用的结果,再次设置所有行可见.为了避免这种行为,我只是放置了过滤

$spreadsheet->getActiveSheet()->setAutoFilter(sprintf("A4:%s%d",Coordinate::stringFromColumnIndex($colCount-6),$rowNo-1));

foreach 之前。