You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
51 lines
1.7 KiB
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheet\Worksheet;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Cell\CellAddress;
|
|
use PhpOffice\PhpSpreadsheet\Cell\CellRange;
|
|
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
|
|
|
|
class AutoFit
|
|
{
|
|
protected Worksheet $worksheet;
|
|
|
|
public function __construct(Worksheet $worksheet)
|
|
{
|
|
$this->worksheet = $worksheet;
|
|
}
|
|
|
|
public function getAutoFilterIndentRanges(): array
|
|
{
|
|
$autoFilterIndentRanges = [];
|
|
$autoFilterIndentRanges[] = $this->getAutoFilterIndentRange($this->worksheet->getAutoFilter());
|
|
|
|
foreach ($this->worksheet->getTableCollection() as $table) {
|
|
/** @var Table $table */
|
|
if ($table->getShowHeaderRow() === true && $table->getAllowFilter() === true) {
|
|
$autoFilter = $table->getAutoFilter();
|
|
if ($autoFilter !== null) {
|
|
$autoFilterIndentRanges[] = $this->getAutoFilterIndentRange($autoFilter);
|
|
}
|
|
}
|
|
}
|
|
|
|
return array_filter($autoFilterIndentRanges);
|
|
}
|
|
|
|
private function getAutoFilterIndentRange(AutoFilter $autoFilter): ?string
|
|
{
|
|
$autoFilterRange = $autoFilter->getRange();
|
|
$autoFilterIndentRange = null;
|
|
|
|
if (!empty($autoFilterRange)) {
|
|
$autoFilterRangeBoundaries = Coordinate::rangeBoundaries($autoFilterRange);
|
|
$autoFilterIndentRange = (string) new CellRange(
|
|
CellAddress::fromColumnAndRow($autoFilterRangeBoundaries[0][0], $autoFilterRangeBoundaries[0][1]),
|
|
CellAddress::fromColumnAndRow($autoFilterRangeBoundaries[1][0], $autoFilterRangeBoundaries[0][1])
|
|
);
|
|
}
|
|
|
|
return $autoFilterIndentRange;
|
|
}
|
|
}
|
|
|