简体   繁体   中英

Remove hidden rows when reading file with phpExcel?

When reading a sheet with phpExcel using the toArray method, hidden rows are also parsed.

Is there a method I can use before toArray to remove hidden rows?

Code so far, using Codeigniter

$this->load->library('excel');
$objPHPExcel = PHPExcel_IOFactory::load($upload_data['full_path']);

foreach ($objPHPExcel->getAllSheets() as $sheet) {
    $sheets[$sheet->getTitle()] = $sheet->toArray();
}

$data = array();
foreach ($sheets['Data'] as $key => $row) {
    if ($key > 0) {
        $item = array();
        $item['name'] = $row[1];
        $item['code'] = $row[2];
        $data[] = $item;
    }
}

When converting the sheet to Array using PHPExcel_Worksheet::toArray you will get all of the rows, regardless if they are visible or not.

If you want to filter only the visible rows you will have to iterate over the rows and check for each of them if they are visible or not. You can check the visibility of a row using

$sheet->getRowDimension($row_id)->getVisible()

$row_id starts with 1 (and not 0), same is in excel

Here is an example of how to use it in your code. I changed a bit the way you get the Data sheet, since you don't need to iterate over the sheets, you can just get that specific sheet using the getSheetByName function.

$data_sheet = $objPHPExcel->getSheetByName('Data');
$data_array = $data_sheet->toArray();
$data = [];

foreach ($data_sheet->getRowIterator() as $row_id => $row) {
    if ($data_sheet->getRowDimension($row_id)->getVisible()) {
        // I guess you don't need the Headers row, note that now it's row number 1
        if ($row_id > 1) { 
            $item = array();
            $item['name'] = $data_array[$row_id-1][1];
            $item['code'] = $data_array[$row_id-1][2];
            $data[] = $item;
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM