使用phpExcel读取文件时删除隐藏的行?

orb*_*ory 0 php codeigniter phpexcel

使用 phpExcel 使用 toArray 方法读取工作表时,还会解析隐藏的行。

我可以在 toArray 之前使用一种方法来删除隐藏的行吗?

到目前为止的代码,使用 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dek*_*kel 5

使用将工作表转换为数组时,PHPExcel_Worksheet::toArray您将获得所有行,无论它们是否可见。

如果只想过滤可见行,则必须遍历行并检查它们中的每一个是否可见。您可以使用检查行的可见性

$sheet->getRowDimension($row_id)->getVisible()
Run Code Online (Sandbox Code Playgroud)

$row_id 以 1(而不是 0)开头,同样在 excel 中

这是如何在代码中使用它的示例。我改变了你获取工作Data表的方式,因为你不需要遍历工作表,你可以使用该getSheetByName函数获取特定的工作表 。

$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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)