#php #xml #phpexcel #phpspreadsheet
#php #xml #phpexcel #phpspreadsheet
Вопрос:
Я успешно добавляю автоматический фильтр в свой электронный лист, но что я хотел бы сделать, так это применить фильтр к листу перед сохранением. Например, у меня есть 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?
РЕДАКТИРОВАТЬ: Текущий код выглядит следующим образом
$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(PhpOfficePhpSpreadsheetStyleFill::FILL_SOLID)
->getStartColor()->setARGB('71eb0e');
//add rows of data
$row_num = 2;
foreach($laundry_pairs as $row_data){
$sheet->fromArray($row_data, null, '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');
пожалуйста, не обращайте внимания на странный способ, которым я перебираю ячейки. Теперь я точно знаю, что вы можете получить доступ по строке с индексом col.
Комментарии:
1. возможно, вы захотите показать нам PHP-код, который вы используете для сохранения данных. таким образом, мы могли бы помочь.
Ответ №1:
Я наконец нашел то, что искал, в примерах на странице 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
);