2016-07-20 28 views
0

使用toArray方法读取使用phpExcel的工作表时,也会分析隐藏行。使用phpExcel读取文件时删除隐藏行吗?

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

到目前为止的代码,用笨

$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; 
    } 
} 

回答

2

当使用PHPExcel_Worksheet::toArray你会得到所有行,而不管它们是否可见或不可见片转换为数组。

如果您只想过滤可见的行,您必须遍历行并检查它们是否可见。您可以使用带有1(而不是0)

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

$row_id开始检查行的知名度,同样是在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; 
     } 
    } 
}