PHP–Excel 异步导入数据库
1. 这里使用的是 phpoffice/phpspreadsheet , 首先 composer 安装
composer require phpoffice/phpspreadsheet
2. 异步上传的话,要先通过前端OSS上传等方式,获取文件url, 如:http://XXXX-hangzhou.aliyuncs.com/export/780b60f76f2774ae75396844.Xlsx
3. 直接上代码,使用 CV大法,嘿嘿嘿!!
public function importExcel(ImportRequest $request) { header("Access-Control-Allow-Origin: *"); $file_url = $request->input('file_url'); // 第二部获取的文件 url $ext = pathinfo($file_url, PATHINFO_EXTENSION | PATHINFO_FILENAME); // 获取文件后缀 if (!in_array($ext, ['xls', 'xlsx', 'Xlsx', 'Xls'])) { ApiException::break(Status::ERR_USER_FILE_TYPE); // 限制文件类型 } $file = @file_get_contents($file_url); if (!$file) { ApiException::break(Status::ERR_USER_FILE_FALL); } $size_mb = round(strlen($file) / 1048576 * 100) / 100; if ($size_mb > 5) { ApiException::break(Status::ERR_USER_FILE_MAX); // 限制文件大小,当前5M } $file_name = date("YmdHis") . '.' . $ext; file_put_contents($file_name, $file); // 文件保存本地 $data = $this->importData($file_name, $ext); // 获取文件内容 $data = array_filter(array_values($data)); if (empty($data)) { ApiException::break('69022|未获取到文件内容'); } if (file_exists($file_name)) { unlink($file_name); } foreach ($data as $key => $item) { $data[$key] = [ 'order_no' => $item['A'], // 按自己的逻辑 取值 'receiver_name' => $item['B'], 'receiver_phone' => $item['C'], 'platform_code' => $item['D'], 'create_time' => time() ]; } //插入数据库 $res = Db::table('biaoming')->insert($data); if (!$res) { ApiException::break(Status::ERR_OPERATE_FAILED); } return $this->response->apiSuccess(); }
public function importData(string $file_path, $ext = 'Xls') { if (in_array($ext, ['xls', 'Xls'])) { $reader = IOFactory::createReader('Xls'); } else { $reader = IOFactory::createReader('Xlsx');//设置以Excel5格式(Excel97-2003工作簿) } $phpExcel = $reader->load($file_path);// 载入excel文件 $excelSheet = $phpExcel->getSheet(0);//读取第一个工作表 $highestRow = $excelSheet->getHighestRow();//取得总行数 $highestColumn = $excelSheet->getHighestColumn();//取得总列数 $data = []; for ($row = 2; $row <= $highestRow; $row++) { // 从第二行开始取数据 for ($col = 'A'; $col < $highestColumn; $col++) { $value = $excelSheet->getCell($col . $row)->getValue(); $data[$row][$col] = $value; } } return $data; }
4. 自测一下,看是否插入到数据库数据,然后可以催前端联调了,哈哈哈哈哈
原文地址:https://www.cnblogs.com/JGNotMe/p/14765653.html