laravel-excel导入/导出功能
导出功能:
maatwebsite/excel 使用此组件用作导出,效果比较友好,但是感觉导入就不太友好
导入:
box/spout 推荐使用这个组件 导入效果比较好-- https://opensource.box.com/spout/getting-started/#reader 生成一个导入类 在控制器中 获取上传文件request()->file('file'); Import::import($filePath); 返回的则是表格内数据 <?phpnamespace App\Import;
use Box\Spout\Reader\Common\Creator\ReaderFactory; use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
class Import { public static function import($files) { $data = []; // 获取上传文件名称 // $filename = $files->getClientOriginalName();
$ext = $files->getClientOriginalExtension(); if (!in_array($ext, ['csv', 'xlsx'])) { throw new \Exception('表格类型错误,暂时只支持csv,xlsx', 400); }
/** @var \Box\Spout\Reader\ReaderAbstract */ $reader = ReaderFactory::createFromType($ext); $reader->setShouldFormatDates(true); if ($ext === 'csv') { /** @var \Box\Spout\Reader\CSV\Reader $reader */ $reader->setEncoding('GB2312'); } $reader->open($files); $iterator = $reader->getSheetIterator(); $iterator->rewind(); /** * 只能获取第一页数据 * @var \Box\Spout\Reader\XLSX\Sheet */ $sheet1 = $iterator->current(); $rowIter = $sheet1->getRowIterator();
foreach ($rowIter as $rowIndex => $row) { $rowArr = $row->toArray(); $data[] = array_splice($rowArr, 0, 64); } $reader->close(); return collect($data); } }