Laravel - Попытка добиться предварительного просмотра файла Excel перед отправкой, но это работает только одним конкретным способом

Я работаю с функцией импровизации в Excel (используя пакет maatwebsite/excel), и эта часть у меня есть, но мне также нужно иметь функцию, которая позволяла бы apreview "sneak peek" перед загрузкой файла.

Мне удалось заставить его работать (рис. https://imgur.com/rySv3Ck), но ТОЛЬКО он работает определенным образом - код:

public function MakeImportPreview(Request $request)
{
    $dataPreview = Excel::toCollection(new ClientsImport(), $request->file('file'));

    $randomDataPreviews = $dataPreview->get(0)
        ->take(20)
        ->reject(function($row) {
            return
                !isset($row['name'])
                || !isset($row['email'])
                || is_null($row['name'])
                || is_null($row['email'])
                || empty($row['name'])
                || empty($row['email']);
        })
        ->toArray();


    return view('clients.preview', compact('randomDataPreviews'));
}

Из класса ClientsImportPreview:

class ClientsImportPreview implements ToCollection, WithHeadingRow, WithLimit
{

public function collection(Collection $rows)
{
   return $rows->get(0)->reject(function($row) {
       return
           !isset($row['name'])
           || !isset($row['email'])
           || is_null($row['name'])
           || is_null($row['email'])
           || empty($row['name'])
           || empty($row['email']);
   })->take(20);
}


public function limit(): int
{
    return 20;
}

}

По сути, использование отклонения и проверки на пустоту / отсутствие установки было единственным способом, которым я мог заставить его работать.

Есть ли способ сделать эту работу, ища заполненные поля, в отличие от незаселенных?

Например, если я попробую следующий код вместо этого:

public function MakeImportPreview(Request $request)
{
    $dataPreview = Excel::toCollection(new ClientsImport(), $request->file('file'));

    $randomDataPreviews = $dataPreview->get(0)
        ->take(20)
        ->map(function($row) {
            return
                isset($row['name'])
                || isset($row['email'])
                || !is_null($row['name'])
                || !is_null($row['email'])
                || !empty($row['name'])
                || !empty($row['email']);
        })
        ->toArray();


    return view('clients.preview', compact('randomDataPreviews'));
}



  class ClientsImportPreview implements ToCollection, WithHeadingRow, WithLimit
{

public function collection(Collection $rows)
{
   return $rows->get(0)->reject(function($row) {
       return
           !isset($row['name'])
           || !isset($row['email'])
           || is_null($row['name'])
           || is_null($row['email'])
           || empty($row['name'])
           || empty($row['email']);
   })->take(20);
}

Затем я получаю следующий результат - https://imgur.com/6iFKH4Y.

Любая помощь с благодарностью. Заранее спасибо!

0 ответов

Другие вопросы по тегам