问题描述
我已成功将自动过滤器添加到电子表格,但我想做的是在保存之前将过滤器应用于电子表格。例如,我有一个RetailerID
列,其中包含三个可能的值(13,42,326)
。如何保存已被RetailerID = 42
过滤的工作表?
我在XML中发现了不同之处:
<autoFilter ref="A1:O1290" xr:uid="{00000000-0009-0000-0000-000000000000}">
<filterColumn colId="0">
<filters>
<filter val="42"/>
</filters>
</filterColumn>
</autoFilter>
但是手动更改此设置不会隐藏行,因为需要隐藏的每一行都需要'hidden="1"'
属性。如何在PHP Spread Sheets中完成此操作?
编辑: 当前代码如下:
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray(array_keys($laundry_pairs[0]),null,'A1');
// Set title row bold
$sheet->getStyle('A1:E1')->getFont()->setBold(true);
//set title row color
$sheet->getStyle('A1:O1')->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('71eb0e');
//add rows of data
$row_num = 2;
foreach($laundry_pairs as $row_data){
$sheet->fromArray($row_data,'A' . (string)$row_num++);
}
//set the column widths to display all textdomain
for ($col=chr(65); $col < chr(80); $col++){
$sheet->getColumnDimension((string)$col)->setAutoSize(true);
}
//set auto filters
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
// Save
$writer = new Xlsx($spreadsheet);
$writer->save('laundry_pairs.xlsx');
请忽略我在细胞上迭代的奇怪方法。我知道您现在可以按行,列索引进行访问。
解决方法
我终于在github页面的示例中找到了我想要的东西。 https://github.com/PHPOffice/PhpSpreadsheet/blob/master/samples/Autofilter/10_Autofilter_selection_display.php
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
$autoFilter->getColumn('C')
->setFilterType(Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
->createRule()
->setRule(
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,42
);