я использую Laravel-первенствует экспортировать данные из моей базы данных в таблицу Excel. Столбцы, содержащие даты, не интерпретируются как даты в Excel, поэтому, когда я собираюсь импортировать этот файл Excel с использованием laravel-excel, эти столбцы не анализируются и форматируются неправильно.
Пример таблицы:
table name: items
id | name | some_date
===========================
1 Boxes 2014-11-13 17:00:00
2 Pickles 2016-12-01 13:30:00
...
Мой код Laravel:
Excel::create('SomeTitle', function($excel) {
$items = Item::all()->toArray();
$excel->sheet('SheetName', function($sheet) use($items) {
$sheet->fromArray($items, null, 'A1', true);
});
})->export('xls');
Теперь в экспортированном файле Excel столбец C (который является «some_date») будет содержать такую дату, как 2014-11-13 17:00:00
, но Excel не распознает это как дату — поэтому, когда я импортирую плитку с помощью laravel-excel, она не будет автоматически преобразована в экземпляр углерод.
Когда я использую $sheet->setColumnFormat(array('C' => 'yyyy-mm-dd'));
и снова импортируйте файл Excel, laravel-excel теперь распознает и преобразует дату в экземпляр Carbon, но дата, время и дни будут полностью отключены!
Единственный способ, которым Excel распознает ячейки в столбце как даты, — это если я щелкну по столбцу и щелкну прочь. Excel затем автоматически преобразует его в дату.
Как я могу гарантировать, что some_date
колонка автоматически конвертируется в дату при экспорте файла?
Если вы хотите вернуть дополнительные столбцы как экземпляры Carbon, добавьте в свою модель следующее:
public function getDates(){
return array('created_at','updated_at','some_date');
}
Это вернет его как экземпляр Carbon автоматически. Так что теоретически всякий раз, когда он пытается распечатать экземпляр, он должен быть распечатан в виде строки.
Других решений пока нет …