Laravel-excel: [Pertanyaan] Bagaimana cara melewati baris kosong (3.1)

Dibuat pada 29 Okt 2018  ·  12Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

  • Versi paket: 3.1

Keterangan

Bagaimana cara melewati baris kosong di dokumen?

more information needed

Komentar yang paling membantu

Halo,
Saya telah mencoba menggunakan $row->filter()->isNotEmpty() tetapi karena saya menggunakan WithValidation kode berhenti dengan kesalahan validasi. Aturan saya terlihat seperti ini:

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

Sayangnya, jika Anda memiliki file excel dan menghapus konten beberapa baris di akhir file excel, Laravel-Excel masih mengenalinya sebagai tidak kosong. Kemudian validasi gagal. Saya ingin melewati baris seperti itu sebelum validasi.

Semua 12 komentar

Terima kasih telah mengirimkan tiketnya. Sayangnya informasi yang Anda berikan tidak lengkap. Kami perlu mengetahui versi mana yang Anda gunakan dan cara mereproduksinya. Harap sertakan contoh kode. Sebelum kami dapat mengambilnya, harap periksa (https://github.com/Maatwebsite/Laravel-Excel/blob/3.0/.github/ISSUE_TEMPLATE.md) dan tambahkan informasi yang hilang. Untuk mempermudah pemrosesan tiket ini, pastikan untuk memeriksa (https://laravel-excel.maatwebsite.nl/docs/3.0/getting-started/contributing) dan periksa kembali apakah Anda telah mengisi template masalah benar. Ini akan memungkinkan kami untuk mengambil tiket Anda dengan lebih efisien. Masalah yang mengikuti pedoman dengan benar akan mendapatkan prioritas di atas masalah lainnya.

Duplikat #1834

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'],
                ...
            ]);
        }
    }   
}

```

Bagaimana cara kerjanya untuk cara toModel?

Anda dapat mengembalikan nol di toModel, akan melewati baris itu.

Halo,
Saya telah mencoba menggunakan $row->filter()->isNotEmpty() tetapi karena saya menggunakan WithValidation kode berhenti dengan kesalahan validasi. Aturan saya terlihat seperti ini:

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

Sayangnya, jika Anda memiliki file excel dan menghapus konten beberapa baris di akhir file excel, Laravel-Excel masih mengenalinya sebagai tidak kosong. Kemudian validasi gagal. Saya ingin melewati baris seperti itu sebelum validasi.

@seven21 , apakah Anda menemukan solusi untuk ini ? apakah ada yang menyelesaikan masalah ini?

Saya menggunakan solusi yang membantu dalam kasus saya. Validasi diperpanjang dengan nullable di semua baris untuk menghindari kesalahan dan kemudian Dalam metode yang saya tambahkan
public function model(array $row) {if(!array_filter($row)) { return null;} return new Customer([..... dan lewati baris ini saat ini. Tidak terlalu senang dengan ini karena saya tidak dapat mengembalikan pesan kesalahan yang berguna tetapi karena saya tidak menemukan solusi, cara terbaik untuk menjalankan kode.

@seven21 Terima kasih banyak atas contoh dan pesan Anda yang bermanfaat, Tapi saya juga berpikir ini bukan cara yang baik jika kita benar-benar menggunakan validasi.

@mohamednizar bagaimana Anda mengatasi masalah ini?

Saya tidak sepenuhnya menyelesaikan masalah, tetapi untuk solusi saya, saya menambahkan fungsi khusus berikut untuk mengembalikan ukuran batch dan batas baris. batas baris hanya akan dihitung jika data ada di kolom.

 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;
        }
    }

Beberapa waktu ini dapat membantu Anda untuk menyelesaikan beberapa jenis masalah.

Anda dapat mengabaikan baris kosong dengan memperbarui file config/excel.php.

dari:

        /*
        |--------------------------------------------------------------------------
        | 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,

ke:

        /*
        |--------------------------------------------------------------------------
        | 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,

Apakah halaman ini membantu?
0 / 5 - 0 peringkat