当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP使用PHPExcel读取excel数据并批量上传到数据库

发布:smiling 来源: PHP粉丝网  添加日期:2025-12-12 11:07:36 浏览: 评论:0 

当遇到需要批量导入数据的时候,前端会上传一个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读取文件写入数据库

  1. <?php 
  2.  
  3. header("Content-type:text/html; charset=utf-8"); 
  4.  
  5. // 制定允许其他域名访问 
  6.  
  7. header("Access-Control-Allow-Origin:*"); 
  8.  
  9. // 响应类型 
  10.  
  11. header('Access-Control-Allow-Methods:POST'); 
  12.  
  13. // 响应头设置 
  14.  
  15. header('Access-Control-Allow-Headers:x-requested-with, content-type'); 
  16.  
  17. // 数据库配置文件 
  18.  
  19. include'./config/config.php'
  20.  
  21. // 下载 PHPExcel 放入项目内,引入即可 
  22.  
  23. include"./PHPExcel-1.8/Classes/PHPExcel/IOFactory.php"
  24.  
  25. // 获取前端传入的文件 
  26.  
  27. $file$_FILES['file']; 
  28.  
  29. //临时文件存放路径 
  30.  
  31. $fileTmp$file['tmp_name']; 
  32.  
  33. $fileSize$file['size']; 
  34.  
  35. $fileName$file['name']; 
  36.  
  37. //错误,输出0,表示文件提交成功 
  38.  
  39. $fileError$file['error']; 
  40.  
  41. if($fileError==0) { 
  42.  
  43. $inputFileName$fileTmp
  44.  
  45. date_default_timezone_set('PRC'); 
  46.  
  47. // 读取excel文件 
  48.  
  49. try{ 
  50.  
  51. $inputFileType= PHPExcel_IOFactory::identify($inputFileName); 
  52.  
  53. $objReader= PHPExcel_IOFactory::createReader($inputFileType); 
  54.  
  55. $objPHPExcel$objReader->load($inputFileName); 
  56.  
  57. } catch(Exception $e) { 
  58.  
  59.  
  60. // 确定要读取的sheet,什么是sheet,看excel的右下角 
  61.  
  62. $sheet$objPHPExcel->getSheet(0); 
  63.  
  64. $highestRow$sheet->getHighestRow(); 
  65.  
  66. $highestColumn$sheet->getHighestColumn(); 
  67.  
  68. $timedate('Y-m-d h:i:s', time()); 
  69.  
  70. // 把数据处理后存入数组 
  71.  
  72. $arrayarray(); 
  73.  
  74. $timedate('Y-m-d h:i:s', time()); 
  75.  
  76. for($row= 2; $row<= $highestRow$row++) { 
  77.  
  78. $rowData$sheet->rangeToArray('A'$row':'$highestColumn$row, NULL, TRUE, FALSE); 
  79.  
  80. // 重复数据不插入数据库 
  81.  
  82. $falg$rowData[0][0]; 
  83.  
  84. $sqlIf"SELECT codes FROM tablef where codes = '$falg'"
  85.  
  86. $querySQL= mysqli_query($conn,$sqlIf); 
  87.  
  88. $arrSQL= mysqli_fetch_array($querySQL); 
  89.  
  90. if($arrSQL== null) { 
  91.  
  92. // 获取到 Excel 每行的数据插入数据库,需根据你自己的表格进行调整 
  93.  
  94. $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."')"
  95.  
  96. $query=mysqli_query($conn,$sql);//函数执行一条 MySQL 查询。 
  97.  
  98.  
  99.  
  100. // 成功后返回给前端 
  101.  
  102. echojson_encode(["msg"=> 'ok']); 
  103.  
  104. }else
  105.  
  106. echojson_encode(["msg"=> 'no']); 
  107.  
  108.  
  109. // 断开数据库连接 
  110.  
  111. $conn->close();    
  112.  
  113. ?> 

结语

这是原生PHP使用的一个方式,我PHP的话只会一个 ThinkPHP 框架,这边我测试的话 ThinkPHP 使用起来跟这个也是差不多的,至于有些其他的php框架的话我没有用过,但是基本都差不多。现在前后端分离占主导地位,对于一些做后台的兄弟们来说,这些批量导入数据的是很常见的,这边就分享一个简单的,对于一些sql语句的话是需要修改的,这里面的sql语句是不安全的,这里提醒一下大家,测试的时候使用这些SQL语句为啥问题,生产环境切记不能这样用。

Tags: PHPExcel读取excel PHPExcel批量上传数据库

分享到: