Laravel-excel: filter potongan setiap kali mendapat 250 Baris pertama

Dibuat pada 8 Apr 2015  ·  34Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

Excel::filter('chunk')->load($path)->chunk(250, function($results) use ($data)
{
print_r($hasil);
});

fungsi ini mendapat setiap kali 250 baris pertama excel, tidak mendapatkan baris lainnya,
file excel saya berisi 12000 Baris tetapi mengembalikan 250 baris pertama.

Tolong bantu saya , mungkin saya salah atau mungkin fungsi ini hanya mengembalikan 250 baris pertama , apakah ada cara lain untuk mendapatkan semua baris dalam potongan yang bijaksana ?

Catatan: saya menggunakan beberapa lembar.

Komentar yang paling membantu

Jika Anda mengikuti pemanggilan tumpukan di modul PHPExcel, ia melakukan php dasar fgetcsv (lihat http://php.net/manual/en/function.fgetcsv.php). Jika Anda kemudian mencari masalah pada akhir baris dengan CSV, ada artikel ini di stackoverflow: http://stackoverflow.com/questions/5539053/php-fgetcsv-returning-all-lines

Dengan menambahkan ini_set('auto_detect_line_endings', true); ke bagian atas file php Anda, itu memperbaiki masalah bagi saya.

Semua 34 komentar

Apa gunanya ($data) lakukan? Saya tidak memilikinya, dan saya mengembalikan lebih dari kumpulan potongan pertama.

use $data akan memberikan opsi untuk menggunakan $data (variabel luar) di dalam function .

Anda tidak dapat menggunakan filter potongan dengan beberapa lembar. Anda harus memilih yang pertama. Lihat https://github.com/Maatwebsite/Laravel-Excel/issues/270

Mendapatkan masalah yang sama saat mengimpor file CSV.

Excel::filter('chunk')->load('file.csv')->chunk(250, function($results)
{
    foreach($results as $row)
    {
        // do stuff
    }
});

menggunakan:
"phpoffice/phpexcel": "1.8.0"
"maatwebsite/excel": "~1.3.0" -> versi dev saya adalah V1.3.4 yang tampaknya berfungsi dengan phpexcel 1.8.0

Saya menggunakan file CSV dasar dan potongan pertama berhasil dibaca, saya dapat mengulangi semua catatan tanpa kesalahan, meskipun potongan setelah potongan pertama tidak terdeteksi. Saya mencoba mengubah ukuran potongan dan semua baris berhasil muncul tetapi potongan berikutnya tidak.

Permasalahan yang sama.

Setidaknya saya memecahkan masalah saya dengan solusi ini: saya perlu menyimpan tanggal seperti yang ada di mysql db, karena dalam tanggal xlsx ketika saya mendapatkannya dikonversi dalam nilai yang dihitung, jadi saya pertama-tama mengonversi file ini ke csv kemudian menggunakan

Excel::filter('chunk')->load('file.csv')->chunk(250, function($results)
{
foreach($hasil sebagai $baris)
{
// lakukan sesuatu
}
});

karena csv menghapus (tidak mendukung) semua konversi format dll.

Juga jika hanya menyangkut tanggal maka Anda dapat menggunakan rumus Anda sendiri untuk mengonversi tanggal kembali.

+1 pada ini.

Excel::filter('chunk')->load($csv->getRealPath())->chunk(200, function($results){
    foreach($results as $row) {
        //Do stuff
    }
});

Berhasil mendapatkan potongan pertama CSV dan kemudian berhenti setelah itu. Namun saat menggunakan xlsx berfungsi dengan baik.

Saya telah melacak masalahnya hingga $spreadsheetInfo dengan mengatakan bahwa lembar kerja memiliki satu baris dan setengah juta kolom. Nilai yang tepat harus sekitar 1500 totalRows dan 20 totalColumns untuk file csv saya. Saya menduga itu mem-parsing kolom yang memiliki data seperti ="002342" salah yang menyebabkannya tidak melihat jeda baris. Namun ketika Anda benar-benar membaca data itu membacanya dengan benar.

Membuka file csv di LibreOffice dan menyimpan kembali menggunakan data dengan "Simpan konten sel seperti yang ditunjukkan" dan "Kutip semua sel teks" adalah pekerjaan yang cukup baik untuk saya saat ini, jadi saya rasa saya tidak akan melakukannya debugging ini lebih lanjut.

Jika masalahnya ada di dalam $spreadsheetInfo , itu berarti masalahnya ada di dalam paket induk PHPExcel.

+1

Jika Anda mengikuti pemanggilan tumpukan di modul PHPExcel, ia melakukan php dasar fgetcsv (lihat http://php.net/manual/en/function.fgetcsv.php). Jika Anda kemudian mencari masalah pada akhir baris dengan CSV, ada artikel ini di stackoverflow: http://stackoverflow.com/questions/5539053/php-fgetcsv-returning-all-lines

Dengan menambahkan ini_set('auto_detect_line_endings', true); ke bagian atas file php Anda, itu memperbaiki masalah bagi saya.

+1 ini...
Ada solusi belum?

+1
Saya memiliki masalah yang sama

apakah itu diselesaikan di 2.1.1?

Tidak maaf. Saya menghapus.
Ini bekerja dengan solusi ini_set
El 23/1/2016 15:48, "Jordi Puigdellívol" [email protected]
penjelasan:

apakah itu diselesaikan di 2.1.1?


Balas email ini secara langsung atau lihat di GitHub
https://github.com/Maatwebsite/Laravel-Excel/issues/388#issuecomment -174191580
.

Tampaknya filter potongan hanya berfungsi pada lembar pertama sehingga sangat penting untuk melewati indeks lembar

Excel::filter('chunk')->selectSheetsByIndex(0)->load('file.csv')->chunk(250, function($results)
{
foreach($hasil sebagai $baris)
{
// simpan ke DB
}
});

Menggunakan 2.1.0 dan ini sepertinya masih belum diperbaiki, adakah yang punya solusi yang berfungsi untuk mengimpor file xls?

+1, tidak ada impor xls yang dipotong dengan 2.1.0.

+1 Masih tidak berfungsi.

+1 Tidak berfungsi untuk saya, mencoba menggunakan csv, xls, xltx, dan xlsx. Kode saya:

Excel::filter('chunk')->load($file_name)->chunk(200, function($results) { foreach($results as $row) { // do stuff } });
Yang aneh adalah file saya berisi 1800 baris tetapi hanya 1000 pertama yang dimuat ...

Masih tidak berfungsi pada 10 Mei 2017. Hanya impor potongan pertama untuk csv. Antrian diatur dan berfungsi dengan benar.

@akumar Memilih lembar seharusnya tidak masalah jika potongan pertama sudah berfungsi. saya tambahkan

pilihSheetsByIndex(0)

dan itu tidak menyelesaikan masalah.

@rogerweefc
Solusi itu berhasil!! Antrian saya mulai membakar semua potongan sekarang, pemandangan yang sangat indah, terima kasih.

Dari @rogerweefc

Dengan menambahkan ini_set('auto_detect_line_endings', true); ke atas file php Anda itu memperbaiki masalah bagi saya.

Mengubah pengaturan ini Anda ( ini_set('auto_detect_line_endings', true); ) memang solusinya.

itu tidak berfungsi seperti ini_set('auto_detect_line_endings', true);Ini hanya mendapatkan baris potongan pertama。Tolong bantu saya

Sama disini. Tidak ada solusi yang disebutkan di atas yang memperbaikinya untuk saya. Mencoba dengan file xlsx .

+1
Permasalahan yang sama. Semua solusi tidak berfungsi. File CSV, 1 lembar.
Ada saran?
Terima kasih

Excel::filter('chunk') ->selectSheetsByIndex(0)->load($path)->chunk(250, function($results) use($data) {
$row_set = $results->toArray();
  foreach ($row_set as $key => $row) {
                  var_dump($row);  
                }
            });

Coba cara ini. Ini berhasil untuk saya.

ini_set('auto_detect_line_endings', true); bekerja untuk saya. Atau secara manual mengubah akhiran Baris, dalam kasus saya dari Macintosh (CR) ke Windows (CR LF).
Tanpa itu hanya 250 baris pertama yang diantrekan/dimuat.

(File csv pengujian saya berukuran 4k, berisi satu lembar dan memiliki 36k baris)

Halo semuanya

Saya mengalami masalah ini dan macet selama berjam-jam, dan saya menyelesaikannya dengan berhenti menggunakan dd() (keluar dari program) di dalam callback!

Semoga membantu,

ini_set('auto_detect_line_endings', benar); melakukan trik untuk saya!

Terima kasih @rogerweefc

@aoxiaoxi
Saya harus masuk ke file konfigurasi excel dan mengubah import.force_sheets_collection menjadi false, lalu semua potongan mulai memiliki data.

Hai, Saya mencoba mengimpor file excel dalam lumen menggunakan situs web Maat, termasuk menggunakan situs web Maatwebsite\Excel\Facades\Excel; di atas controller dan di bootstrap/app.php termasuk baris ini

$app->register('Maatwebsite\Excel\ExcelServiceProvider');
class_alias('Maatwebsite\Excel\Facades\Excel', 'Excel');
class_alias('Illuminate\Support\Facades\Response', 'Response');
class_alias('Illuminate\Support\Facades\Config', 'Config');

Dan kode fungsinya adalah
$array = [];
Excel::load('Untitled_2.xlsx', function ($reader) {

     $reader->each(function($sheet) {  
           var_dump($sheet);  
         foreach ($sheet->toArray() as $row) {
           // User::firstOrCreate($row);
            $array[] = $row;
         }
     });
});

Tanpa Judul_2.xlsx

diberikan file si terlampir.

Tetapi data kembali kosong, itu tidak menunjukkan kesalahan apa pun kepada saya. Tolong bimbing saya untuk hal yang sama

@RajshreeTathe
Anda dapat mencoba

$excel_data = [];
Excel::load($filename, function ($reader) use (&$excel_data) {
    $reader->ignoreEmpty();
    $reader->getSheet(0);
    $excel_data = $reader->toArray();
});

Saya masih mengalami masalah ini dengan file xlsx & pengaturan ini_set('auto_detect_line_endings', true); tidak menghasilkan apa-apa.

Masih masalah yang sama ketika mencoba memotong file csv: tidak ada dalam potongan, tidak ada kesalahan yang ditampilkan di mana pun.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat