Improved AutoFilter examples

This commit is contained in:
MarkBaker
2023-04-02 12:00:28 +02:00
parent 3f418ceb9a
commit 9cf41b5dd2
3 changed files with 19 additions and 12 deletions
+1 -1
View File
@@ -100,4 +100,4 @@ $helper->log("Set autofilter for cells {$filterRange}");
$spreadsheet->getActiveSheet()->setAutoFilter($filterRange);
// Save
$helper->write($spreadsheet, __FILE__);
$helper->write($spreadsheet, __FILE__, ['Xlsx']);
@@ -1,5 +1,6 @@
<?php
use PhpOffice\PhpSpreadsheet\Helper\Sample;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column;
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule;
@@ -11,8 +12,10 @@ require __DIR__ . '/../Header.php';
// This possibility is accounted for in unit tests,
// but seems unneccesarily complicated for the sample.
function createSheet(Spreadsheet $spreadsheet, string $rule): void
function createSheet(Sample $helper, Spreadsheet $spreadsheet, string $rule, bool $displayInitialWorksheet): void
{
$helper->log('Add data');
$sheet = $spreadsheet->createSheet();
$sheet->setTitle($rule);
$sheet->getCell('A1')->setValue('Date');
@@ -40,6 +43,13 @@ function createSheet(Spreadsheet $spreadsheet, string $rule): void
$sheet->getStyle('B1')->getNumberFormat()->setFormatCode('yyyy-mm-dd');
$sheet->getColumnDimension('A')->setAutoSize(true);
$sheet->getColumnDimension('B')->setAutoSize(true);
if ($displayInitialWorksheet) {
$helper->log('Unfiltered Dates');
$helper->displayGrid($sheet->toArray(null, true, true, true));
}
$helper->log("Filter for $rule");
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
$autoFilter->setRange("A1:A{$row}");
$columnFilter = $autoFilter->getColumn('A');
@@ -51,6 +61,9 @@ function createSheet(Spreadsheet $spreadsheet, string $rule): void
$helper->log('Execute filtering (apply the filter rules)');
$autoFilter->showHideRows();
$helper->log('Filtered Dates');
$helper->displayGrid($sheet->toArray(null, true, true, true, true));
}
// Create new Spreadsheet object
@@ -89,9 +102,8 @@ $ruleNames = [
];
// Create the worksheets
foreach ($ruleNames as $ruleName) {
$helper->log("Add data and filter for $ruleName");
createSheet($spreadsheet, $ruleName);
foreach ($ruleNames as $index => $ruleName) {
createSheet($helper, $spreadsheet, $ruleName, $index === 0);
}
$spreadsheet->removeSheetByIndex(0);
$spreadsheet->setActiveSheetIndex(0);
@@ -170,10 +170,5 @@ $spreadsheet->setActiveSheetIndex(0);
// Display Results of filtering
$helper->log('Display filtered rows');
foreach ($spreadsheet->getActiveSheet()->getRowIterator() as $row) {
if ($spreadsheet->getActiveSheet()->getRowDimension($row->getRowIndex())->getVisible()) {
$helper->log(' Row number - ' . $row->getRowIndex());
$helper->log($spreadsheet->getActiveSheet()->getCell('C' . $row->getRowIndex())->getValue());
$helper->log($spreadsheet->getActiveSheet()->getCell('D' . $row->getRowIndex())->getFormattedValue());
}
}
$helper->displayGrid($spreadsheet->getActiveSheet()->toArray(null, false, true, true, true));