Столбцы с предварительной фильтрацией PHP таблицы распространения

#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
    );