Phpexcel читает удаленные строки?
После выполнения некоторого QA я обнаружил, что PHPExcel все еще читает удаленные строки (удаленные с помощью клавиши Delete/Backspace) на листе Excel, чего не должно быть, как будто он может получить доступ к какому-то кэшу.
Когда я пытаюсь напечатать то, что возвращает удаленная строка, она просто пуста, но все равно включает эту удаленную строку в результаты импорта.
Какие проверки / условия я должен использовать, чтобы он просто пропускал пустые строки?
Что я уже пробовал:
Вот блок моего кода, который вызывается при выборе файла:
public function importTraining() { $is_imported = false; $read_sheet = $this->obj_reader->getActiveSheet(); $has_error = false; $maxRow = $read_sheet->getHighestDataRow(); foreach ($read_sheet->getRowIterator() as $row) { $this->emptyValues(); $cellIterator = $row->getCellIterator(); $employee_code; foreach ($cellIterator as $cell) { $current_row = $cell->getRow(); $cell_value = $cell->getFormattedValue(); $column = $cell->getColumn(); $current_column = PHPExcel_Cell::columnIndexFromString($cell->getColumn()); if ($current_row == 1) { $column_header[$column] = strtolower(trim($cell_value)); }else{ $column_header_value = strtolower(trim($column_header[$column])); switch ($column_header_value) { case 'employee no.': if( $cell_value != null){ $employee_code = trim($cell_value); $ec = G_Employee_Finder::findByEmployeeCode($employee_code); if ($ec) { $employee_code = $ec->getId(); $this->fields['employee_id'] = $employee_code; } } break; case 'training': if( $cell_value != null ){ $this->fields['description'] = trim($cell_value); } break; case 'from(date)': if( $cell_value != null ){ $date_format = $this->convertToDate(trim($cell_value)); $this->fields['from_date'] = $date_format; if( strtotime($date_format) <= 0 ){ $has_error = true; } } break; case 'to (date)': if( $cell_value != null){ $date_format = $this->convertToDate(trim($cell_value)); $this->fields['to_date'] = $date_format; if( strtotime($date_format) <= 0 ){ $has_error = true; } } break; case 'provider/trainor': if( $cell_value != null){ $this->fields['provider'] = trim($cell_value); } break; case 'location': if( $cell_value != null ){ $this->fields['location'] = trim($cell_value); } break; default: break; } } } //end of cell loop if( $current_row > 1 ){ $has_error = false; if ((!isset($this->fields['employee_id']))) { $this->addErrorMissingEmployeeCode($current_row); $has_error = true; } //check if training exists $from_date = $this->fields['from_date']; $to_date = $this->fields['to_date']; $provider = $this->fields['provider']; $location = $this->fields['location']; $description = $this->fields['description']; if (isset($this->fields['employee_id'])) { $employee_id = $this->fields['employee_id']; $y = $this->doesTrainingExist($employee_id, $from_date, $to_date, $provider, $location, $description); if ($y) { $this->addErrorDuplicateTraining($current_row); $has_error = true; } } if (!$has_error) { $this->addTraining(); $this->successful_import++; } } // if current row > 1 } //end of row loop $has_error = false; $this->emptyValues(); return true; }
Результаты импорта показывают следующее:
1. Успешного импорта
2. Повторяющиеся поля
3. Нераспознанные данные
-- > удаленная строка включается в эту часть после ее удаления после того, как она была успешно импортирована в первый раз.