rinald_未来往事

tp5 Excel表格导入_tp5导出Excel

PHP

thinkphp5使用PHPExcel导入Excel、csv表格,thinkphp5表格导入导出

tp5使用PHPExcel导入Excel表格文件:
  1. PS:将PHPExcel扩展包放到vendor目录下
  2. /vendor/PHPExcel.php
  3. /vendor/PHPExcel
  4. public function uploadUser(){
  5. if(Request::instance()->isPost()){
  6. $file = request()->file('file'); // 获取表单提交过来的文件
  7. $error = $_FILES['file']['error']; // 如果$_FILES['file']['error']>0,表示文件上传失败
  8. if(!$error){
  9. $dir = ROOT_PATH . 'public' . DS . 'upload';
  10. // 验证文件并移动到框架应用根目录/public/uploads/ 目录下
  11. $info = $file->validate(['size'=>3145728,'ext'=>'xls,xlsx,csv'])->rule('uniqid')->move($dir);
  12. /*判断是否符合验证*/
  13. if($info){ // 符合类型
  14. //$file_type = $info->getExtension();
  15. $filename = $dir. DS .$info->getSaveName();
  16. //echo $filename;
  17. Vendor("PHPExcel.IOFactory");
  18. $reader = \PHPExcel_IOFactory::createReader('Excel2007'); //设置以Excel2007格式
  19. $PHPExcel = $reader->load($filename); // 载入excel文件
  20. $sheet = $PHPExcel->getSheet(0); // 读取第一個工作表
  21. $highestRow = $sheet->getHighestRow(); // 取得总行数
  22. $highestColumm = $sheet->getHighestColumn(); // 取得总列数
  23. /** 循环读取每个单元格的数据 */
  24. $User = new User;
  25. for ($row = 2; $row <= $highestRow; $row++){//行数是以第1行开始,这里示例中excel有3列字段
  26. $userName = $sheet->getCell('A'.$row)->getValue();;
  27. $website = $sheet->getCell('B'.$row)->getValue();;
  28. $phone = $sheet->getCell('C'.$row)->getValue();;
  29. $where = array();
  30. $where['website'] = $website ? $website : 'http://fity.cn';
  31. $where['phone'] = $phone;
  32. $userInfo = $User->where($where)->find();
  33. if($userInfo){
  34. $userInfo = $userInfo->toArray();
  35. }
  36. $data = array();
  37. if (!$userInfo) {
  38. $data = array(
  39. 'userName' => $userName,
  40. 'website' => $website,
  41. 'phone' => $phone
  42. );
  43. $User->data($data,true)->isUpdate(false)->save();
  44. }
  45. }
  46. $this->success('导入数据库成功',url('index'));
  47. } else{ // 不符合类型业务
  48. $this->error('请选择上传3MB内的excel表格文件...');
  49. //echo $file->getError();
  50. }
  51. }else{
  52. $this->error('请选择需要上传的文件...');
  53. }
  54. }
  55. }
tp5使用PHPExcel导出数据为Excel表格:
  1. PS:将PHPExcel扩展包放到vendor目录下
  2. /vendor/PHPExcel.php
  3. /vendor/PHPExcel
  4. public function exportUser(){
  5. //引入PHPExcel库文件
  6. Vendor("PHPExcel");
  7. //创建对象
  8. $excel = new \PHPExcel();
  9. //Excel表格式,这里简略写了3列
  10. $letter = array('A','B','C','D');
  11. //表头数组
  12. $tableheader = array('姓名','手机号','网址');
  13. //填充表头信息
  14. for($i = 0;$i < count($tableheader);$i++) {
  15. $excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
  16. }
  17. //表格数组
  18. $data = array(
  19. array('测试1','18888888888','http://fity.cn'),
  20. array('测试2','18888888888','http://fity.cn'),
  21. array('测试2','18888888888','http://fity.cn'),
  22. );
  23. //填充表格信息
  24. for ($i = 2;$i <= count($data) + 1;$i++) {
  25. $j = 0;
  26. foreach ($data[$i - 2] as $key=>$value) {
  27. $excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value");
  28. $j++;
  29. }
  30. }
  31. //创建Excel输入对象
  32. $write = new \PHPExcel_Writer_Excel2007($excel);
  33. header("Pragma: public");
  34. header("Expires: 0");
  35. header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
  36. header("Content-Type:application/force-download");
  37. header("Content-Type:application/vnd.ms-execl");
  38. header("Content-Type:application/octet-stream");
  39. header("Content-Type:application/download");;
  40. header('Content-Disposition:attachment;filename="导出测试.xls"');
  41. header("Content-Transfer-Encoding:binary");
  42. $write->save('php://output');
  43. }
tp5使用自定义函数导出数据为Excel表格:
  1. public function exportUser(){
  2. $userList = Db::name('user')->select();
  3. $string = "姓名\t手机号\t网址\t\n";
  4. $string = iconv('utf-8','gb2312',$string);
  5. foreach ($userList as $key=>$val) {
  6. $userName = iconv('utf-8','gb2312',$val['userName']);
  7. $phone = $val['phone'];
  8. $website = iconv('utf-8','gb2312',$val['website']);
  9. $time = date('Y-m-d H:i:s',$val['time']);
  10. $string .= $userName."\t".$phone."\t".$website."\t".$time."'\t\n";
  11. }
  12. $fileName = date("YmdHis").".xls";
  13. $this->exportExcelDriver($fileName,$string); //调用Excel导出函数
  14. }
  15. //Excel导出函数
  16. protected function exportExcelDriver($filename,$content){
  17. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  18. header("Content-Type: application/vnd.ms-execl");
  19. header("Content-Type: application/force-download");
  20. header("Content-Type: application/download");
  21. header("Content-Disposition: attachment; filename=".$filename);
  22. header("Content-Transfer-Encoding: binary");
  23. header("Pragma: no-cache");
  24. header("Expires: 0");
  25. echo $content;
  26. }


补充:建议对获取的单元格数据进行数据类型检测,降低出错概率
  1. if(is_object($userName)){ //如果变量是对象格式化为字符串
  2. $userName= $userName->__toString();
  3. }
原文作者:rinald
原文地址:https://fity.cn/post/621.html
互联网技术更新较快,本站很多文章具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请您在转载时保留此出处信息,尊重别人也是尊重自己。

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。