Laravel-excel: [Вопрос] Как пропустить пустые строки (3.1)

Созданный на 29 окт. 2018  ·  12Комментарии  ·  Источник: Maatwebsite/Laravel-Excel

  • Версия пакета: 3.1

Описание

Как пропустить пустые строки в документе?

more information needed

Самый полезный комментарий

Привет,
Я пытался использовать $row->filter()->isNotEmpty(), но из-за того, что я использую WithValidation, коды останавливаются с ошибкой проверки. Мои правила выглядят так:

public function rules(): array { return [ 'name' => 'required', '*.name' => 'required', 'email' => 'required|email', '*.email' => 'required|email', 'discount' => 'nullable|numeric', '*.discount' => 'nullable|numeric', ]; }

К сожалению, если у вас есть файл excel, удалите содержимое некоторых строк в конце файла excel, Laravel-Excel все равно распознает их как непустые. Тогда проверка не проходит. Я хочу пропустить такие строки перед проверкой.

Все 12 Комментарий

Спасибо за отправку билета. К сожалению, предоставленная Вами информация является неполной. Нам нужно знать, какую версию вы используете и как ее воспроизвести. Пожалуйста, включите примеры кода. Прежде чем мы сможем его подобрать, проверьте (https://github.com/Maatwebsite/Laravel-Excel/blob/3.0/.github/ISSUE_TEMPLATE.md) и добавьте недостающую информацию. Чтобы упростить обработку этой заявки, обязательно проверьте (https://laravel-excel.maatwebsite.nl/docs/3.0/getting-started/contributing) и еще раз проверьте, заполнили ли вы шаблон задачи. правильно. Это позволит нам быстрее забрать ваш билет. Проблемы, которые правильно следуют рекомендациям, получат приоритет над другими проблемами.

Дубликат № 1834

используйте метод ToCollection, чтобы обернуть все в пределах if($row->filter()->isNotEmpty())
```
коллекция публичных функций (коллекция $rows)
{
foreach($строки как $строка) {
если($row->filter()->isNotEmpty()){
// здесь может быть ваша логика

            $user = User::create([
                'name' => ucwords($row['name']),
                'class' => $row['class'],
                ...
            ]);
        }
    }   
}

```

Как это работает для пути toModel?

Вы можете вернуть null в toModel, эти строки будут пропущены.

Привет,
Я пытался использовать $row->filter()->isNotEmpty(), но из-за того, что я использую WithValidation, коды останавливаются с ошибкой проверки. Мои правила выглядят так:

public function rules(): array { return [ 'name' => 'required', '*.name' => 'required', 'email' => 'required|email', '*.email' => 'required|email', 'discount' => 'nullable|numeric', '*.discount' => 'nullable|numeric', ]; }

К сожалению, если у вас есть файл excel, удалите содержимое некоторых строк в конце файла excel, Laravel-Excel все равно распознает их как непустые. Тогда проверка не проходит. Я хочу пропустить такие строки перед проверкой.

@seven21 , вы нашли решение для этого? кто-нибудь решил эту проблему?

Я использую обходной путь, который помогает в моем случае. Проверка расширяется с помощью nullable для всех строк, чтобы избежать ошибок, а затем в методе, который я добавил
public function model(array $row) {if(!array_filter($row)) { return null;} return new Customer([..... и пропустите эти строки на этом этапе. Не очень доволен этим, так как я не могу вернуть полезное сообщение об ошибке, но, поскольку я не нашел решения, лучший способ запустить код.

@ семь21 Большое спасибо за ваш пример и полезное сообщение, но я также думаю, что это не лучший способ, если мы действительно используем проверки.

@mohamednizar как ты решил эту проблему?

Я не решил проблему полностью, но для своего решения я добавил следующие пользовательские функции для возврата размера пакета и ограничения строки. предел строки будет учитываться только в том случае, если данные существуют в столбце.

 public function limit(): int {
        $highestColumn = $this->worksheet->getHighestDataColumn(3);
        $higestRow = 0;
        for ($row = $this->startRow(); $row <= $this->highestRow; $row++) {
            $rowData = $this->worksheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
            if (isEmptyRow(reset($rowData))) {
                continue;
            } else {
                $higestRow += 1;
            }
        }
        return $higestRow;
    }

   public function batchSize(): int {
        $highestColumn = $this->worksheet->getHighestDataColumn(3);
        $higestRow = 1;
        for ($row = $this->startRow(); $row <= $this->highestRow; $row++) {
            $rowData = $this->worksheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
            if (isEmptyRow(reset($rowData))) {
                continue;
            } else {
                $higestRow += 1;
            }
        }
        if ($higestRow == 0) {
            exit;
        } else {
            return $higestRow;
        }
    }

Некоторое время это может помочь вам решить некоторые проблемы.

вы можете игнорировать пустую строку, обновив файл config/excel.php.

от:

        /*
        |--------------------------------------------------------------------------
        | Ignore Empty
        |--------------------------------------------------------------------------
        |
        | When dealing with imports, you might be interested in ignoring
        | rows that have null values or empty strings. By default rows
        | containing empty strings or empty values are not ignored but can be
        | ignored by enabling the setting ignore_empty to true.
        |
        */
        'ignore_empty' => false,

к:

        /*
        |--------------------------------------------------------------------------
        | Ignore Empty
        |--------------------------------------------------------------------------
        |
        | When dealing with imports, you might be interested in ignoring
        | rows that have null values or empty strings. By default rows
        | containing empty strings or empty values are not ignored but can be
        | ignored by enabling the setting ignore_empty to true.
        |
        */
        'ignore_empty' => true,

Была ли эта страница полезной?
0 / 5 - 0 рейтинги