原生 PHP 使用 PHPExcel 读取 excel 数据批量上传数据到数据库
应用场景
当遇到需要批量导入数据的时候,前端会上传一个excel表格,由后端读取数据并存入数据库。前端代码就不介绍了,这是一个前后端分离的项目,主要是讲解后端读取excel表格的数据。前端上传文件就可以了。
PHPExcel 是什么
是用来操作office excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如Excel(BIFF).xls,Excel 2007 (OfficeOpenXML),.xlsx,CSV,Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
要求
- PHP 5.2.0 版本及以上
- PHP extension php_zip 开启 (如果你需要使用 PHPExcel 来操作 .xlsx .ods or .gnumeric 文件)
- PHP extension php_xml 开启
- PHP extension php_gd2 开启(选填, 如果需要计算准确的列宽需要开启此扩展)
PHP 读取文件写入数据库
<?php
header("Content-type:text/html; charset=utf-8");
// 制定允许其他域名访问
header("Access-Control-Allow-Origin:*");
// 响应类型
header('Access-Control-Allow-Methods:POST');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with, content-type');
// 数据库配置文件
include './config/config.php';
// 下载 PHPExcel 放入项目内,引入即可
include "./PHPExcel-1.8/Classes/PHPExcel/IOFactory.php";
// 获取前端传入的文件
$file = $_FILES['file'];
//临时文件存放路径
$fileTmp = $file['tmp_name'];
$fileSize = $file['size'];
$fileName = $file['name'];
//错误,输出0,表示文件提交成功
$fileError = $file['error'];
if($fileError==0) {
$inputFileName = $fileTmp;
date_default_timezone_set('PRC');
// 读取excel文件
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
// 确定要读取的sheet,什么是sheet,看excel的右下角
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$time = date('Y-m-d h:i:s', time());
// 把数据处理后存入数组
$array = array();
$time = date('Y-m-d h:i:s', time());
for ($row = 2; $row <= $highestRow; $row++) {
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
// 重复数据不插入数据库
$falg = $rowData[0][0];
$sqlIf = "SELECT codes FROM tablef where codes = '$falg'";
$querySQL = mysqli_query($conn,$sqlIf);
$arrSQL = mysqli_fetch_array($querySQL);
if($arrSQL == null) {
// 获取到 Excel 每行的数据插入数据库,需根据你自己的表格进行调整
$sql="insert into tablef(codes,year,month,idcode,type,timese) values('".$rowData[0][0]."','" .($rowData[0][1])."','".$rowData[0][2]."','".$rowData[0][3]."','".$rowData[0][4]."','".$time."')";
$query=mysqli_query($conn,$sql);//函数执行一条 MySQL 查询。
// 成功后返回给前端
echo json_encode(["msg" => 'ok']);
}else {
echo json_encode(["msg" => 'no']);
// 断开数据库连接