1、安装 PhpSpreadsheet
composer require phpoffice/phpspreadsheet
2、控制器代码
public function importExcel()
{
// 接收文件
$file = $_FILES['file']['tmp_name'];
// 创建读操作
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
// 打开文件、载入excel表格
$spreadsheet = $reader->load($file);
// 获取活动工作薄
$sheet = $spreadsheet->getActiveSheet();
// 获取总行数
$highestRow = $sheet->getHighestRow();
// 存放插入成功的记录
$successLog = [];
// 存放插入失败的记录
$failLog = [];
// 从第二行开始读取表格数据,循环写入数据库
for ($i = 2; $i <= $highestRow; $i++) {
// 第 1 次循环获取第 3 列 第 2 行单元格的值,第 2 次循环获取第 3 列 第 3 行单元格的值
$name = $sheet->getCellByColumnAndRow(3,$i)->getValue();
$age = $sheet->getCellByColumnAndRow(4,$i)->getValue();
$sex = $sheet->getCellByColumnAndRow(5,$i)->getValue();
$room = $sheet->getCellByColumnAndRow(6,$i)->getValue();
// 假设数据表有以下字段
$data = [
'name' => $name,
'age' => $age,
'sex' => $sex,
'room_id' => $room,
'create_time' => date('Y-m-d H:i:s', time())
];
$insert = Db::name('student')->insert($data);
if ($insert) {
$successLog[] = '第'.$i.'条,插入成功';
} else {
$failLog[] = '第'.$i.'条,插入失败';
}
}
// 将成功数和失败数返回给 ajax
return json(['success' => count($successLog), 'fail' => count($failLog)]);
}