عند إنشاء فئة مخصصة:
class CSVExcel extends Excel {
protected $delimiter = ';';
}
وباستخدام:
CSVExcel::load('file.csv')->export('xls');
لم يتم احترام إعداد المحدد
أنت تخلط بين شيئين: حقن الملفات والواجهات.
أنت تقوم بتوسيع فئة الواجهة ، التي لا تحتوي على خاصية محدد $.
ما تريد القيام به هو شيء مثل:
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 ()؛
التعليق الأكثر فائدة
تضمين التغريدة
لاستخدام محدد الجدولة في ملف csv ، يجب تعيينه على هذا النحو
"\t"
يجب أن يكون بين علامتي اقتباس وليس اقتباسات مفردة
لذا فإن التكوين في
config/excel.php
سيكون هكذا'delimiter' => "\t",