phpexcel 已被废弃,建议我们用phpspreadsheet
由于PHPExcel已经被废弃在PHP7.2中已经无法获取更新,官方重新开了一个新包phpspreadsheet
注意:这里使用的是tp6框架做测试
第一步:使用composer在根项目下安装phpspreadsheet
安装命令:composer require phpoffice/phpspreadsheet
安装成功后,会在vendor目录下成一个目录:phpoffice
第二步:后端代码处理
注意:**顶部引入第三方类库
引入:use \PhpOffice\PhpSpreadsheet\IOFactory;
代码处理*
public function import()
{
header("content-type:text/html;charset=utf-8");
if (request()->isPost()) {
//上传excel文件
$files = request()->file();
//将文件保存到public/uploads目录下面
try {
validate(['image' => 'fileSize:1048576|fileExt:xls'])->check($files);
$savename = [];
foreach ($files as $file) {
$savename[] = \think\facade\Filesystem::disk('public')->putFile('uploads', $file, 'md5');
}
} catch (think\exception\ValidateException $e) {
return json(['status' => '1', 'message' => $e->getMessage()]);
}
//获取文件路径
$filePath = ROOT_PATH() . '/public/' . $savename[0];
halt($filePath);
$spreadsheet = IOFactory::load($filePath);
$sheetData = $spreadsheet->getActiveSheet()->toArray(true, true, true, true, true);
$row_num = count($sheetData);
$now_time = time();
$import_data = []; //数组形式获取表格数据
//从第二行开始做for循环
for ($i = 2; $i <= $row_num; $i++) {
$bank_deal_no = $sheetData[$i]['A'];
$account_name = $sheetData[$i]['B'];
$bank_card = $sheetData[$i]['C'];
$deal_money = $sheetData[$i]['D'];
$deal_time = $sheetData[$i]['E'];
if (!empty($bank_deal_no) && !empty($account_name) && !empty($bank_card) && !empty($deal_money) && !empty($deal_time)) {
$import_data[$i]['bank_deal_no'] = $bank_deal_no;
$import_data[$i]['account_name'] = $account_name;
$import_data[$i]['bank_card'] = $bank_card;
$import_data[$i]['deal_money'] = $deal_money;
$import_data[$i]['deal_time'] = $deal_time;
$import_data[$i]['create_time'] = $now_time;
$import_data[$i]['update_time'] = $now_time;
}
}
sort($import_data);
if (empty($import_data)) {
return json(['status' => '1', 'message' => '数据解析失败']);
}
$total_num = count($import_data);
if ($total_num > 100) {
return json(['status' => '1', 'message' => '数据超出限制,最多100条']);
}
//以下代码根据你的需求处理,这里只做演示
//校验是否重复:交易流水号
$data_array = array_column($import_data, 'bank_deal_no');
$data_ids = implode(',', $data_array);
$result_data = Db::name('user_bank_bill')
->field('bank_deal_no')
->where('bank_deal_no', 'in', $data_ids)
->select()
->toArray();
$error_message = '';
if (!empty($result_data)) {
$result_data_array = array_column($result_data, 'bank_deal_no');
$result_data_ids = implode(',', $result_data_array);
$error_message = '以下流水号有重复,已筛选出: ' . $result_data_ids;
foreach ($import_data as $key => $value) {
if (in_array($value['bank_deal_no'], $result_data_array)) {
unset($import_data[$key]);
}
}
}
if (!empty($import_data)) {
//将数据保存到数据库
$res = Db::name('user_bank_bill')->insertAll($import_data);
if ($res) {
return json(['status' => '2', 'message' => '操作成功', 'result' => $error_message]);
} else {
return json(['status' => '1', 'message' => '提交失败,请刷新重试']);
}
}
return json(['status' => '2', 'message' => '数据错误', 'result' => $error_message]);
} else {
return json(['status' => '2', 'message' => '请求方式错误']);
}
}
到此导入数据就完成了,可根据实际需求优化代码