Laravel-excel: محدد CSV

تم إنشاؤها على ١٥ أكتوبر ٢٠١٤  ·  26تعليقات  ·  مصدر: Maatwebsite/Laravel-Excel

عند إنشاء فئة مخصصة:

class CSVExcel  extends Excel {
    protected $delimiter  = ';';
}

وباستخدام:

 CSVExcel::load('file.csv')->export('xls');

لم يتم احترام إعداد المحدد

التعليق الأكثر فائدة

تضمين التغريدة
لاستخدام محدد الجدولة في ملف csv ، يجب تعيينه على هذا النحو "\t"
يجب أن يكون بين علامتي اقتباس وليس اقتباسات مفردة
لذا فإن التكوين في config/excel.php سيكون هكذا
'delimiter' => "\t",

ال 26 كومينتر

أنت تخلط بين شيئين: حقن الملفات والواجهات.

أنت تقوم بتوسيع فئة الواجهة ، التي لا تحتوي على خاصية محدد $.

ما تريد القيام به هو شيء مثل:

class MyOwnFile extends ExcelFile {

    protected $delimiter = ';';

    public function getFile()
    {
        return storage_path('exports') . '/file.csv';
    }

}

class ExampleController {

    public function __construct(MyOwnFile $file)
    {
        $this->file = $file;
    }

    public function import()
    {
        // if using fileHandlers:
        $this->file->handleImport();

       // If you want to fetch inside the controller (which I wouldn't recommend)
       $this->file->get();
    }

    // or if you are using Laravel 5.0, you could use the method injection:
    public function import(MyOwnFile $file)
    {
        $file->handleImport();
    }
}

إذا كانت المستندات محيرة بشأن هذا الأمر ، فيرجى إبلاغي بذلك أو تقديم طلب سحب للمستندات :)

مستندات حول حقن الملفات: http://www.maatwebsite.nl/laravel-excel/docs/import#injection

كيفية تعيين المحدد لملف CSV أثناء التنقل. في الواقع أنا أستخدم وظيفة "Excel :: load" في وحدة التحكم التي تعمل على توسيع BaseController. لقد نجحت في تحميل .XLS و. XLSX و CSV مع الإعداد الافتراضي كما هو مذكور في ملف التكوين csv.php. لكن المشكلة هي أنني يجب أن آخذ مدخلات المستخدم لمحدد مثل الإدخال يمكن أن يكون Pipesign ، Tab إلخ. فكيف أفعل ذلك؟ الرجاء المساعدة.

يمكنك استخدام طرق مثل setDelimiter() لتجاوز إعدادات التكوين. انظر: https://github.com/Maatwebsite/Laravel-Excel/blob/master/src/Maatwebsite/Excel/Readers/LaravelExcelReader.php#L271

نعم. لقد استخدمت:
النتائج $ = Excel :: load ('uploads /'. $ filename، function ($ reader) {

                })->setDelimiter("|")->get();

لكنها تقرأ جميع القيم في عمود واحد لأنها لا تأخذ "محدد الأنبوب". الرجاء المساعدة.

انا لدى نفس المشكله. باستخدام Laravel 4. هذا هو الكود من وحدة التحكم الخاصة بي:

public function uploadData()
{
        $file = Input::file('data')->getRealPath();

        \Excel::load($file, function($reader) {
                echo "<pre>";
                $reader->setDelimiter('|');
                print_r($reader->get());
        });
}

لا يتم تقسيم الإخراج على فاصل الأنبوب ، بدلاً من ذلك يتم التعامل معه كسلسلة طويلة واحدة. هذه عينة:

    Maatwebsite\Excel\Collections\RowCollection Object
(
    [title:protected] => Worksheet
    [items:protected] => Array
        (
            [0] => Maatwebsite\Excel\Collections\CellCollection Object
                (
                    [title:protected] => 
                    [items:protected] => Array
                        (
                            [upc_numberitem_numberqty_availunit_pricedescriptioncolorqty_on_ponext_avail_dt] => 040176424354|53607-3037|0|14.50|PACK-N-GO DUFFELS 20?"|BIRDS ON A WIRE/LEAF GREEN||
                        )

                )

            [1] => Maatwebsite\Excel\Collections\CellCollection Object
                (
                    [title:protected] => 
                    [items:protected] => Array
                        (
                            [upc_numberitem_numberqty_availunit_pricedescriptioncolorqty_on_ponext_avail_dt] => 040176414850|53607-3054|0|14.50|PACK-N-GO DUFFELS 20?"|BLACK/BLACK/BLACK||
                        )

                )
)

أفعل شيئا خطأ هنا؟ لماذا لا يتم تحليل الصفوف على حرف الأنبوب؟

إذا قمت بتغيير إعداد delimiter في config/csv.php ، فسيتم تحليل الملف بشكل صحيح. لماذا لا تعمل باستخدام طريقة setDelimiter() ؟

يجب عليك تغيير المحدد قبل تحميل الملف:

Excel::setDelimiter('|')->load(...);

شكرًا لك على المساعدة ، ولكن هذا يعطي خطأ الآن:

iconv() expects parameter 1 to be string, object given

الخطأ موجود في Shared / String.php. هل هو مرتبط بطريقة ما بهذا؟

https://github.com/Maatwebsite/Laravel-Excel/issues/382

ماذا لو حاولت ضبطه سريعًا باستخدام:

Config::set('excel::csv.delimiter, '|');

يعمل (Laravel 5.1):

Config::set('excel.csv.delimiter', '|');

حسنًا ، تعمل هذه الطريقة ، ولكن لماذا لا تعمل هذه الطريقة؟

Excel::load($file->getPathName(), function($reader){
    $reader->setDelimiter(';')
    dd($reader->get());
});

نظرًا لأنه تم تحميل الملف بالفعل ، فلا يمكن تغييره بعد الآن.

جيد ... وإذا كنت بحاجة إلى استيراد 2 csv على نفس الطلب ، واستخدام واحد '؛' كمحدد واستخدامات أخرى "،" أحتاج إلى استخدام Config :: set مرتين؟ لا توجد طريقة اخري؟

نعم ، يجب أن يعمل اثنان من Config :: set.

الإصدار 3 سيكون لديه دعم لتغيير المحدد بعد التحميل. لكننا لسنا قريبين من إصدار أي شيء بعد.

شكرا جزيلا على الرد السريع

أنا أستخدم Laravel 4.2 ، لذلك لا يفصل المحدِّد الافتراضي الأعمدة بالطريقة الصحيحة إذا كان أحد الأعمدة فارغًا

في Laravel 4 ، يمكنك ضبط المحدِّد سريعًا باستخدام هذا:
Config::set('excel::csv.delimiter', '|');

المرجع: https://laravel.com/docs/4.2/packages#package -configuration

لماذا تجاوز ، كل شيء موجود في config / Excel.php

'csv'        => array(
    /*
   |--------------------------------------------------------------------------
   | Delimiter
   |--------------------------------------------------------------------------
   |
   | The default delimiter which will be used to read out a CSV file
   |
   */

    'delimiter'   => ';',

    /*
    |--------------------------------------------------------------------------
    | Enclosure
    |--------------------------------------------------------------------------
    */

    'enclosure'   => '',

    /*
    |--------------------------------------------------------------------------
    | Line endings
    |--------------------------------------------------------------------------
    */

    'line_ending' => "\r\n",

    /*
    |--------------------------------------------------------------------------
    | setUseBom
    |--------------------------------------------------------------------------
    */

    'use_bom' => false
),

تعيين المحدد فوق Excel :: تحميل مثل هذا. عمله بالنسبة لي على Laravel 5.3

       Excel::setDelimiter('|');

Excel :: load ($ filename، function ($ reader) {

            foreach ($reader->toArray() as $row) {

                 $data[] = $row;
            }
              print_r($data);
        });

medamineDev config / Excel.php للاستخدام العام. يجب عليك التجاوز عندما يتعين على النظام معالجة الملفات التي لها فاصل / محدد مختلف.

مرحبًا ، كيف يمكن ضبط محدد الجدولة؟

جرب /t

jediscript شكرًا ولكن / t لا يعمل ، يقول أن المحدد يجب أن يكون حرفًا واحدًا.

@ yailperalta-santex ما المشكلة التي تحاول حلها بهذه المكتبة؟ ربما يمكنك استخدام http://php.net/manual/en/function.fgetcsv.php بدلاً من ذلك.

تضمين التغريدة
لاستخدام محدد الجدولة في ملف csv ، يجب تعيينه على هذا النحو "\t"
يجب أن يكون بين علامتي اقتباس وليس اقتباسات مفردة
لذا فإن التكوين في config/excel.php سيكون هكذا
'delimiter' => "\t",

$ data = Excel :: setDelimiter ("t") -> load (storage_path (). '/ uploads / import / data.csv') -> get ()؛

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات