mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-17 21:46:37 +00:00
Improvements to AutoFilter Examples
This commit is contained in:
@@ -85,17 +85,19 @@ $dataArray = [
|
||||
['2011', 'Q4', 'Italy', 335],
|
||||
];
|
||||
$spreadsheet->getActiveSheet()->fromArray($dataArray, null, 'A2');
|
||||
$helper->displayGrid($spreadsheet->getActiveSheet()->toArray(null, false, false, true));
|
||||
|
||||
// Set title row bold
|
||||
$helper->log('Set title row bold');
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
|
||||
|
||||
// Set autofilter
|
||||
$helper->log('Set autofilter');
|
||||
// Always include the complete filter range!
|
||||
$filterRange = $spreadsheet->getActiveSheet()->calculateWorksheetDimension();
|
||||
$helper->log("Set autofilter for cells {$filterRange}");
|
||||
// Always include the complete filter range if you can!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($filterRange);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
|
||||
@@ -41,17 +41,16 @@ function createSheet(Spreadsheet $spreadsheet, string $rule): void
|
||||
$sheet->getColumnDimension('A')->setAutoSize(true);
|
||||
$sheet->getColumnDimension('B')->setAutoSize(true);
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$autoFilter->setRange("A1:A$row");
|
||||
$autoFilter->setRange("A1:A{$row}");
|
||||
$columnFilter = $autoFilter->getColumn('A');
|
||||
$columnFilter->setFilterType(Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER);
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'',
|
||||
$rule
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, '', $rule)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER);
|
||||
$sheet->setSelectedCell('B1');
|
||||
|
||||
$helper->log('Execute filtering (apply the filter rules)');
|
||||
$autoFilter->showHideRows();
|
||||
}
|
||||
|
||||
// Create new Spreadsheet object
|
||||
|
||||
@@ -100,35 +100,38 @@ $spreadsheet->getActiveSheet()->getStyle('E2:F' . $row)->getNumberFormat()->setF
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(14);
|
||||
$spreadsheet->getActiveSheet()->freezePane('A2');
|
||||
|
||||
$helper->displayGrid($spreadsheet->getActiveSheet()->toArray(null, false, true, true));
|
||||
|
||||
// Set autofilter range
|
||||
$helper->log('Set autofilter range');
|
||||
// Always include the complete filter range!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
$filterRange = $spreadsheet->getActiveSheet()->calculateWorksheetDimension();
|
||||
$helper->log("Set autofilter for cells {$filterRange}");
|
||||
// Always include the complete filter range if you can!
|
||||
// Excel does support setting only the caption row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($filterRange);
|
||||
|
||||
// Set active filters
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$helper->log('Set active filters');
|
||||
|
||||
// Filter the Country column on a filter value of countries beginning with the letter U (or Japan)
|
||||
// We use * as a wildcard, so specify as U* and using a wildcard requires customFilter
|
||||
$autoFilter->getColumn('C')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'u*'
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, 'u*')
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
|
||||
$helper->log('Set country code filter (Column C) to countries beginning with "U" ("United States" and "UK")');
|
||||
|
||||
$autoFilter->getColumn('C')
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'japan'
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, 'japan')
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
|
||||
$helper->log('Add "Japan" to the country code filter (Column C)');
|
||||
|
||||
// Filter the Date column on a filter value of the last day of every period of the current year
|
||||
// We us a dateGroup ruletype for this, although it is still a standard filter
|
||||
// We use a dateGroup ruletype for this, although it is still a standard filter
|
||||
foreach ($periods as $period) {
|
||||
$dateString = sprintf('%04d-%02d-01T00:00:00', $currentYear, $period);
|
||||
$dateTime = new DateTime($dateString);
|
||||
@@ -147,15 +150,20 @@ foreach ($periods as $period) {
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_DATEGROUP);
|
||||
}
|
||||
|
||||
$helper->log('Add filter on the Date (Column D) to display only rows for the last day of each month');
|
||||
|
||||
// Display only sales values that are blank
|
||||
// Standard filter, operator equals, and value of NULL
|
||||
// Standard filter, operator equals, and value of NULL or empty space
|
||||
$autoFilter->getColumn('E')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
''
|
||||
);
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, '');
|
||||
|
||||
$helper->log('Add filter on Sales Values (Column E) to display only blank values');
|
||||
|
||||
$helper->log('NOTE: We don\'t apply the filter rules in this example, so we can\'t see the result here; although Excel will apply the rules when the file is loaded');
|
||||
$helper->log('See 10_Autofilter_selection_display.php for an example that actually executes the filter rules');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
|
||||
@@ -100,52 +100,54 @@ $spreadsheet->getActiveSheet()->getStyle('E2:F' . $row)->getNumberFormat()->setF
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(14);
|
||||
$spreadsheet->getActiveSheet()->freezePane('A2');
|
||||
|
||||
$helper->displayGrid($spreadsheet->getActiveSheet()->toArray(null, false, true, true));
|
||||
|
||||
// Set autofilter range
|
||||
$helper->log('Set autofilter range');
|
||||
// Always include the complete filter range!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
$filterRange = $spreadsheet->getActiveSheet()->calculateWorksheetDimension();
|
||||
$helper->log("Set autofilter for cells {$filterRange}");
|
||||
// Always include the complete filter range if you can!
|
||||
// Excel does support setting only the caption row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($filterRange);
|
||||
|
||||
// Set active filters
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$helper->log('Set active filters');
|
||||
|
||||
// Filter the Country column on a filter value of Germany
|
||||
// As it's just a simple value filter, we can use FILTERTYPE_FILTER
|
||||
$autoFilter->getColumn('C')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'Germany'
|
||||
);
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, 'Germany');
|
||||
|
||||
$helper->log('Set country code filter (Column C) to "Germany"');
|
||||
|
||||
// Filter the Date column on a filter value of the year to date
|
||||
$autoFilter->getColumn('D')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
null,
|
||||
Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, null, Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER);
|
||||
|
||||
$helper->log('Add filter on the Date (Column D) to display year to date');
|
||||
|
||||
// Display only sales values that are between 400 and 600
|
||||
$autoFilter->getColumn('E')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
|
||||
400
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL, 400)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
|
||||
$autoFilter->getColumn('E')
|
||||
->setJoin(Column::AUTOFILTER_COLUMN_JOIN_AND)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,
|
||||
600
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL, 600)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
|
||||
$helper->log('Add filter on Sales Values (Column E) between 400 and 600');
|
||||
|
||||
$helper->log('NOTE: We don\'t apply the filter rules in this example, so we can\'t see the result here; although Excel will apply the rules when the file is loaded');
|
||||
$helper->log('See 10_Autofilter_selection_display.php for an example that actually executes the filter rules inside PhpSpreadsheet');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
|
||||
@@ -100,12 +100,14 @@ $spreadsheet->getActiveSheet()->getStyle('E2:F' . $row)->getNumberFormat()->setF
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(14);
|
||||
$spreadsheet->getActiveSheet()->freezePane('A2');
|
||||
|
||||
$helper->displayGrid($spreadsheet->getActiveSheet()->toArray(null, false, true, true));
|
||||
|
||||
// Set autofilter range
|
||||
$helper->log('Set autofilter range');
|
||||
// Always include the complete filter range!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
$filterRange = $spreadsheet->getActiveSheet()->calculateWorksheetDimension();
|
||||
$helper->log("Set autofilter for cells {$filterRange}");
|
||||
// Always include the complete filter range if you can!
|
||||
// Excel does support setting only the caption row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($filterRange);
|
||||
|
||||
// Set active filters
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
@@ -115,18 +117,18 @@ $helper->log('Set active filters');
|
||||
$autoFilter->getColumn('C')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'u*'
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, 'u*')
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
|
||||
$helper->log('Set country code filter (Column C) to countries beginning with "U" ("United States" and "UK")');
|
||||
|
||||
$autoFilter->getColumn('C')
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'japan'
|
||||
)
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, 'japan')
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
|
||||
$helper->log('Add "Japan" to the country code filter (Column C)');
|
||||
|
||||
// Filter the Date column on a filter value of the last day of every period of the current year
|
||||
// We us a dateGroup ruletype for this, although it is still a standard filter
|
||||
foreach ($periods as $period) {
|
||||
@@ -147,18 +149,20 @@ foreach ($periods as $period) {
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_DATEGROUP);
|
||||
}
|
||||
|
||||
$helper->log('Add filter on the Date (Column D) to display only rows for the last day of each month');
|
||||
|
||||
// Display only sales values that are blank
|
||||
// Standard filter, operator equals, and value of NULL
|
||||
$autoFilter->getColumn('E')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
''
|
||||
);
|
||||
->setRule(Rule::AUTOFILTER_COLUMN_RULE_EQUAL, '');
|
||||
|
||||
$helper->log('Add filter on Sales Values (Column E) to display only blank values');
|
||||
|
||||
// Execute filtering
|
||||
$helper->log('Execute filtering');
|
||||
$helper->log('Execute filtering (apply the filter rules)');
|
||||
$autoFilter->showHideRows();
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
|
||||
Reference in New Issue
Block a user