当前位置:   article > 正文

thinkphp6入门(23)-- 如何导入excel

thinkphp6入门(23)-- 如何导入excel

1. 安装phpexcel

composer require phpoffice/phpexcel

图片

composer update

2. 前端

  1. <form class="forms-sample" action="../../xxxx/xxxx/do_import_users" method="post" enctype="multipart/form-data">
  2. <div class="control-group row">
  3. <label>Excel表格:</label>
  4. <input type="file" name="users_excel"/>
  5. </div>
  6. <br>
  7. <button type="submit" class="btn btn-primary mr-2">导入</button>
  8. </form>

图片

3. 后端

  1. use PHPExcel_IOFactory; //通过composer加载的第三方类,直接在头部引入一下就可以
  2. /**
  3. * 批量新增用户
  4. */
  5. public function do_import_users()
  6. {
  7. // users_excel为变量名
  8. if(!request()->file('users_excel')){
  9. return $this->error('请上传excel文件');
  10. }
  11. $path = request()->file('users_excel');
  12. //实例化PHPExcel类
  13. $PHPExcel = new \PHPExcel();
  14. //默认用excel2007读取excel,若格式不对,则用之前的版本进行读取
  15. $PHPReader = new \PHPExcel_Reader_Excel2007();
  16. if (!$PHPReader->canRead($path)) {
  17. $PHPReader = new \PHPExcel_Reader_Excel5();
  18. if (!$PHPReader->canRead($path)) {
  19. return $this->error('请上传excel文件');
  20. }
  21. }
  22. //读取Excel文件
  23. $PHPExcel = $PHPReader->load($path);
  24. //读取excel文件中的第一个工作表
  25. $sheet = $PHPExcel->getSheet(0);
  26. //取得最大的列号,注意,是列号,不是有多少列,比如Q
  27. $allColumn = $sheet->getHighestColumn();
  28. //取得最大的行号
  29. $allRow = $sheet->getHighestRow();
  30. // 第一行是列名,从第二行开始插入
  31. for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
  32. //获取B列的值
  33. $data = [
  34. 'number'=>$PHPExcel->getActiveSheet()->getCell("A" . $currentRow)->getValue(),
  35. 'nickName'=>$PHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue(),
  36. 'name'=>$PHPExcel->getActiveSheet()->getCell("C" . $currentRow)->getValue(),
  37. 'tel'=>$PHPExcel->getActiveSheet()->getCell("D" . $currentRow)->getValue(),
  38. 'money'=>$PHPExcel->getActiveSheet()->getCell("E" . $currentRow)->getValue(),
  39. 'time'=>self::get_date_by_excel($PHPExcel->getActiveSheet()->getCell("F" . $currentRow)->getValue()),
  40. 'is_pay'=>$PHPExcel->getActiveSheet()->getCell("G" . $currentRow)->getValue(),
  41. 'shop_name'=>$PHPExcel->getActiveSheet()->getCell("H" . $currentRow)->getValue(),
  42. 'remarks'=>$PHPExcel->getActiveSheet()->getCell("I" . $currentRow)->getValue(),
  43. 'status'=>0,
  44. 'created_at'=>date('Y-m-d')
  45. ];
  46. // 其它操作,比如插入数据库
  47. }
  48. }
  49. /**
  50. * excel里的字符串时间转时间
  51. */
  52. public static function get_date_by_excel($date){
  53. if (!$date || $date == '0000-00-00') return null;
  54. $unix_time = \PHPExcel_Shared_Date::ExcelToPHP($date);
  55. return gmdate('Y-m-d H:i',$unix_time);
  56. }

注:现在主要使用phpoffice/phpspreadsheet库,phpoffice/phpexcel已经不再维护,但本文由于环境无法更新,所以就安装了phpoffice/phpexcel。基本操作一样。

参考:https://www.tpxhm.com/fdetail/725.html

注:

一、在ubuntu环境下提示 Class 'ZipArchive' not found

 查看对应的php版本

php -v

比如得到的版本是php7.4

那么

sudo apt-get install php7.4-zip

安装之后重启服务

sudo /etc/init.d/apache2 restart

最后通过 php -m | grep zip查看是否安装成功

之前有将在php.ini中将

zlib.output_compression = Off 改为 zlib.output_compression = On

不知道是否有影响

二、如果报错Call to undefined function simplexml_load_string()

 sudo apt-get install php7.4-xml php7.4-xmlrpc
sudo /etc/init.d/apache2 restart

三、如果报错Trying to access array offset on value of type int

请看

Trying to access array offset on value of type int-CSDN博客文章浏览阅读1.1w次,点赞8次,收藏6次。问题描述:出现报错信息 先百度翻译''试图访问int类型值的数组偏移量''通过翻译得知 int型的数据被其他不能使用的类型使用了(个人理解)关于这块 php7.4升级之后会有这个bug 网上大多人是说7.4 版本的向后不兼容更改,非数组的数组样式访问,现在,尝试将 null,bool,int,float 或 resource 类型的值用作数组 ( 例如 $null[“key”] ) 会产生一个通知。解决问题:我这个报错在83行 我先打印查询$pValue查看是什么_trying to access array offset on value of type inthttps://blog.csdn.net/qq5201314wx/article/details/124317321

by: 软件工程小施同学

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/422129
推荐阅读
相关标签
  

闽ICP备14008679号