经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
TP6框架--EasyAdmin学习笔记:Excel表单导入数据库
来源:cnblogs  作者:林恒  时间:2021/5/31 9:12:13  对本文有异议

这是我写的学习EasyAdmin的第四章,这一章我给大家分享下Excel表单导入数据库的全流程需要怎么处理并提供案例

首先给大家看下这个功能的原理,下面是PHP连接打印机的代码

  1. public function uplExcel(Request $request)
  2. {
  3. if (!empty($_FILES['excel']['name'])) {
  4. $fileName = $_FILES['excel']['name']; //得到文件全名
  5. $dotArray = explode('.', $fileName); //把文件名安.区分,拆分成数组
  6. $type = end($dotArray);
  7.  
  8. if ($type != "xls" && $type != "xlsx") {
  9. $ret['res'] = "0";
  10. $ret['msg'] = "不是Excel文件,请重新上传!";
  11. return json_encode($ret);
  12. }
  13.  
  14. //取数组最后一个元素,得到文件类型
  15. $uploaddir = "../uploads2/" . date("Y-m-d") . '/';//设置文件保存目录 注意包含
  16. if (!file_exists($uploaddir)) {
  17. mkdir($uploaddir, 0777, true);
  18. }
  19.  
  20. $path = $uploaddir . md5(uniqid(rand())) . '.' . $type; //产生随机文件名
  21. //$path = "images/".$fileName; //客户端上传的文件名;
  22. //下面必须是tmp_name 因为是从临时文件夹中移动
  23. move_uploaded_file($_FILES['excel']['tmp_name'], $path); //从服务器临时文件拷贝到相应的文件夹下
  24.  
  25. $file_path = $path;
  26. if (!file_exists($path)) {
  27. $ret['res'] = "0";
  28. $ret['msg'] = "上传文件丢失!" . $_FILES['excel']['error'];
  29. return json_encode($ret);
  30. }
  31.  
  32. //文件的扩展名
  33. $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
  34. if ($ext == 'xlsx') {
  35. $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
  36. $objPHPExcel = $objReader->load($file_path, 'utf-8');
  37. } elseif ($ext == 'xls') {
  38. $objReader = \PHPExcel_IOFactory::createReader('Excel5');
  39. $objPHPExcel = $objReader->load($file_path, 'utf-8');
  40. }
  41.  
  42. $sheet = $objPHPExcel->getSheet(0);
  43. $highestRow = $sheet->getHighestRow(); // 取得总行数
  44. $highestColumn = $sheet->getHighestColumn(); // 取得总列数
  45. $ar = array();
  46. $i = 0;
  47. $importRows = 0;
  48. for ($j = 2; $j <= $highestRow; $j++) {
  49. $importRows++;
  50.  
  51. $realName = (string)$objPHPExcel->getActiveSheet()->getCell("A$j")->getValue();//需要导入的realName
  52. $phone = (string)$objPHPExcel->getActiveSheet()->getCell("B$j")->getValue(); //需要导入的phone
  53. $company = (string)$objPHPExcel->getActiveSheet()->getCell("C$j")->getValue(); //需要导入的company
  54. $job = (string)$objPHPExcel->getActiveSheet()->getCell("D$j")->getValue(); //需要导入的job
  55. $email = (string)$objPHPExcel->getActiveSheet()->getCell("E$j")->getValue(); //需要导入的email
  56. $ret['mdata'] = $this->addMemb($phone, $realName, $company, $job, $email);//这里就是我的数据库添加操作定义的一个方法啦,对应替换为自己的
  57.  
  58. if ($ret['mdata'] && !is_Bool($ret['mdata'])) {
  59. $ar[$i] = $ret['mdata'];
  60. $i++;
  61. }
  62. }
  63. if ($i > 0) {
  64. $ret['res'] = "0";
  65. $ret['errNum'] = $i;
  66. $ret['allNum'] = $importRows;
  67. $ret['sucNum'] = $importRows - $i;
  68. $ret['mdata'] = $ar;
  69. $ret['msg'] = "导入完毕!";
  70. return json_encode($ret);
  71. }
  72. $ret['res'] = "1";
  73. $ret['allNum'] = $importRows;
  74. $ret['errNum'] = 0;
  75. $ret['sucNum'] = $importRows;
  76. $ret['mdata'] = "导入成功!";
  77. return json_encode($ret);
  78. } else {
  79. $ret['res'] = "0";
  80. $ret['msg'] = "上传文件失败!";
  81. return json_encode($ret);
  82. }
  83. }  

大家可以看到,正常的Excel导入流程分为上传+解析+数据处理+录入四部,整体的流程是调用对应的接口和插件,而使用TP框架,会直接帮我们绕过上传流程,我们使用PHPEXCEL插件直接到解析,具体代码如下:

下载PHPExcel放到vendor下,并在后台接口中导入

  1. public function save(){
  2. if(request() -> isPost())
  3. {
  4. vendor("PHPExcel.PHPExcel");
  5. $objPHPExcel =new \PHPExcel();
  6. //var_dump($objPHPExcel);die;
  7. //获取表单上传文件
  8. $file = request()->file('excel');
  9. //print_r($file);die;
  10. $info = $file->validate(['ext' => 'xlsx'])->move(ROOT_PATH . 'public/file'); //上传验证后缀名,以及上传之后移动的地址
  11. if($info)
  12. {
  13. $exclePath = $info->getSaveName(); //获取文件名
  14. $file_name = ROOT_PATH . 'public/file/' . DS . $exclePath;//上传文件的地址
  15. $objReader =\PHPExcel_IOFactory::createReader("Excel2007");
  16. $obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8'); //加载文件内容,编码utf-8
  17. $excel_array=$obj_PHPExcel->getSheet(0)->toArray(); //转换为数组格式
  18. //print_r($excel_array);die;
  19. array_shift($excel_array); //删除第一个数组(标题);
  20. $city = [];
  21. $i=0;
  22. foreach($excel_array as $k=>$v) {
  23. $click_time = strtotime($v[2]);//点击时间转为时间戳
  24. $active_time = strtotime($v[2]);//激活时间转为时间戳
  25. $city[$k]['adid'] = $v[0];
  26. $city[$k]['idfa'] = $v[1];
  27. $city[$k]['udid'] = $v[4];
  28. $city[$k]['model'] = $v[5];
  29. $city[$k]['os'] = $v[6];
  30. $city[$k]['ip'] = $v[7];
  31. $city[$k]['add_time'] = $click_time;
  32. $city[$k]['act_time'] = $active_time;
  33. $i++;
  34. }
  35. // print_r($city);die;
  36. Db::name("check_udid")->insertAll($city);
  37. }else
  38. {
  39. echo $file->getError();
  40. }
  41. }
  42. } 

EasyAdmin虽然基于TP6,在使用的过程中我发现,它不需要自己写以上方法,框架自带一些写好的上传方法,直接使用即可,具体方法如下:

在使用的php中导入:

  1. use jianyan\excel\Excel;

调用即可:

  1. $file = request()->file('file');
  2. ini_set('memory_limit','1024M');
  3. $data = Excel::import($file);

如果本文对你有所帮助,麻烦你点个赞,下一章讲下如何自制搜索框并进行各种参数调整。

原文链接:http://www.cnblogs.com/smileZAZ/p/14818767.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号