Saya ingin melewatkan baris kosong. Saya memiliki file excel dengan 4 baris tidak kosong. Saat mengimpor itu membuat koleksi dengan 34 item.
Meskipun menurut saya itu tidak relevan, saya menggunakan pengaturan berikut:
Impor dengan perhatian WithMultipleSheets. Lembar individu yang berisi baris kosong menggunakan masalah berikut: ToCollection, WithHeadingRow, WithStartRow.
Versi sebelumnya di Laravel Excel memiliki opsi abaikanEmpty untuk memfilter baris kosong.
Impor file excel yang berisi baris kosong.
Perilaku yang diharapkan:
Saya ingin mendapatkan koleksi hanya dengan baris yang tidak kosong.
Perilaku sebenarnya:
Koleksi dengan baris tidak kosong dan baris kosong.
saya juga butuh ini. Melihat masalah, saya menemukan bahwa kami tidak dapat melakukan ini dengan Laravel Excel. Kita harus menggunakan PhpSpreadsheet untuk ini. Saya tidak tahu apakah itu benar, apakah ada cara dengan Laravel Excel.
Bagaimana cara menggunakan "ignoreEmpty" di "Beberapa Lembar"? Jika tidak, melebihi ukuran memori yang diizinkan
Bagaimana cara menggunakan "ignoreEmpty" di "Beberapa Lembar"? Jika tidak, melebihi ukuran memori yang diizinkan
abaikanKosong itu tidak berfungsi lagi T_T
ignoreEmpty
dimaksudkan pada sel di 2.1, bukan pada baris. Saat ini tidak ada fungsi abaikanEmptyRows di PhpSpreadsheet. Yang terbaik yang dapat Anda lakukan, lakukan ini, periksa diri Anda di dalam metode ToCollection (mis., periksa dengan (array_filter($row)
)
gunakan metode ToCollection untuk membungkus semuanya dalam if($row->filter()->isNotEmpty())
```
koleksi fungsi publik (Koleksi $baris)
{
foreach($baris sebagai $baris) {
if($row->filter()->isNotEmpty()){
// logikamu bisa ke sini
$user = User::create([
'name' => ucwords($row['name']),
'class' => $row['class'],
...
]);
}
}
}
```
gunakan metode ToCollection untuk membungkus semuanya dalam
if($row->filter()->isNotEmpty())
public function collection(Collection $rows) { foreach($rows as $row) { if($row->filter()->isNotEmpty()){ // you logic can go here $user = User::create([ 'name' => ucwords($row['name']), 'class' => $row['class'], ... ]); } } }
sama akan bekerja di "ToModel" ??
Versi 3.2 akan memiliki masalah SkipsEmptyRows
.
@patrickbrouwers kapan versi 3.2 akan dirilis?
Ini adalah cara lain untuk menghindari baris kosong
/** <strong i="7">@var</strong> CellCollection $row */
foreach ($data as $row) {
if (!$row->filter()->isEmpty()) {
// do something
}
}
Adakah yang menemukan solusi untuk masalah ini dengan ToModel saat masih menggunakan masalah WithValidation ?
Versi 3.2 akan memiliki masalah
SkipsEmptyRows
.
kapan mau rilis?
Saat ini tidak ada waktu untuk mengerjakan 3.2. Jika seseorang ingin mem-backport masalah ke 3.1, saya baik-baik saja dengan memilikinya di 3.1
Saat ini tidak ada waktu untuk mengerjakan 3.2. Jika seseorang ingin mem-backport masalah ke 3.1, saya baik-baik saja dengan memilikinya di 3.1
@patrickbrouwers Saya membuat PR backport, lihat #2984
Versi 3.2 akan memiliki masalah
SkipsEmptyRows
.
Sebelum rilis 3.2, dan lebih memilih untuk tetap di ToModel
, inilah metode solusi saya
WithValidation
, tetap menjadi fungsi rules() : array
Ini untuk menghindari validasi otomatis, kami ingin menjalankan validasi secara manual
Jika Anda memiliki Baris Judul, inisialisasi $rows = 1
Anda, jika tidak $rows = 0
Tanpa WithValidation
, kita juga kehilangan jumlah baris, jadi kita akan membuatnya secara manual
Dalam kasus saya, saya memeriksa semua bidang yang diperlukan apakah semuanya sudah siap. Jika tidak, berarti ini adalah baris kosong (Contoh pada Langkah 4)
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
//
public function model(array $rows)
{
++$this->rows;
//#3 Skip the empty rows
if ( !isset($row['title']) && !isset($row['body'])))
{
return null;
}
//#4 Create Validators
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validation->fails()) {
//Specify which row got into error
$errors = $validation->errors()->all();
foreach ($errors as $key => $err) {
$errors[$key] = "Error at row #".$this->getRowCount().". ".$err;
}
throw ValidationException::withMessages($errors);
}
}
Semoga ini membantu!
Komentar yang paling membantu
Versi 3.2 akan memiliki masalah
SkipsEmptyRows
.