kmllev Ответов: 0

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. Нераспознанные данные
-- > удаленная строка включается в эту часть после ее удаления после того, как она была успешно импортирована в первый раз.

0 Ответов