Как пропустить пустые строки в документе?
Спасибо за отправку билета. К сожалению, предоставленная Вами информация является неполной. Нам нужно знать, какую версию вы используете и как ее воспроизвести. Пожалуйста, включите примеры кода. Прежде чем мы сможем его подобрать, проверьте (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,
Самый полезный комментарий
Привет,
Я пытался использовать $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 все равно распознает их как непустые. Тогда проверка не проходит. Я хочу пропустить такие строки перед проверкой.