流芳

导航

PhpSpreadsheet处理表格

介绍:
PhpSpreadsheet是PHPExcel的下一个版本。它打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。
由于所有努力都转移到了PhpSpreadsheet,因此将不再维护PHPExcel。PHPExcel,补丁和新功能的所有贡献都应该针对PhpSpreadsheet开发分支。
前提:TP5项目中已经安装配置好Composer 管理工具包。


安装:
命令 composer require phpoffice/phpspreadsheet

 

前端上传页面:

 1 <!DOCTYPE html>
 2 <html lang="zh-CN">
 3   <head>
 4     <meta charset="utf-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width, initial-scale=1">
 7     <title>index</title>
 8     <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
 9     <!--[if lt IE 9]>
10       <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
11       <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
12     <![endif]-->
13 </head>
14 <body>
15 
16 <div class="container">
17 
18 <form action="http://test.tp51.com/index/index/uploadexcel" enctype="multipart/form-data" method="post">
19 <div class="form-group">
20     <label for="exampleInputFile">选择文件</label>
21     <input type="file" id="excelFile" name="file" accept=".csv,.xls,.xlsx">
22     <p class="help-block">请选择表格文件,支持 csv,xls,xlsx 格式</p>
23   </div>
24 
25   <div class="form-group">
26     <label for="columm" class="control-label">选择总列数</label>
27       <select class="form-control" name="columm" id="columm"><option>A</option><option>B</option><option>C</option><option>D</option><option>E</option><option>F</option><option>G</option><option>H</option><option>I</option><option>J</option><option>K</option><option>L</option><option>M</option><option>N</option></select>
28   </div>
29 
30 <div class="form-group">
31   <button type="submit" class="btn btn-default">上传</button>
32 </div>
33 </form>
34 
35 </div>
36 
37 <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
38 <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
39 
40 <script type="text/javascript">
41 <!--
42   $("button[type='submit']").on("click",function(){
43     var filestr = $("#excelFile").val();
44     var filemate = getFilemate(filestr);
45     console.log(filemate);
46     if (filemate =='xls' || filemate =='xlsx' || filemate =='csv') {
47       console.log("文件正确");
48       $("form").submit();
49     }else{
50       alert("文件格式不正确");
51       return false;
52     }
53   });
54 
55   //获取文件格式-后缀
56   function getFilemate(o){
57       var index = o.lastIndexOf(".")
58       if (index==-1) {return false;}
59       return o.substring(index+1);
60   }
61 //-->
62 </script>
63 
64 </body>
65 </html>

 

后端接收处理:

 1 <?php
 2 namespace app\index\controller;
 3 
 4 use think\Db;
 5 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 6 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 7 
 8 class Index
 9 {
10     public function index(){
11         return view();
12     }
13 
14     //上传表格文件
15     public function uploadexcel(){
16         $input_columm = input('post.columm/s');
17         $file = request()->file("file");
18         $info = $file->validate(['size'=>5242880,'ext'=>'csv,xls,xlsx'])->rule("date")->move("./uploads/DMH",$this->setupname());
19         if ($info) {
20             //上传成功,处理表格文件
21             $data = array();
22             $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader(ucfirst($info->getExtension()));
23             $spreadsheet = $reader->load($info->getPathname());
24             $sheet = $spreadsheet->getSheet(0); // 读取第一個工作表
25             $highest_row = $sheet->getHighestRow(); // 取得总行数  
26             //$highest_columm = $sheet->getHighestColumn(); // 取得总列数
27             $highest_columm = $input_columm ? $input_columm : $sheet->getHighestColumn(); // 总列数,根据实际情况修改
28             for ($row = 1; $row <= $highest_row; $row++){ //行号从1开始
29                 $arr = array();
30                 for ($column = 'A'; $column <= $highest_columm; $column++){ //列数是以A列开始
31                     $str = $sheet->getCell($column . $row)->getValue();
32                     array_push($arr,$str);
33                 }
34                 if (array_filter($arr)) {
35                     $data[$row] = array_filter($arr);
36                 }
37             }
38             //var_dump($data);
39             return view('excel',['data'=>$data]);
40         } else {
41             echo $file->getError();
42         }
43     }
44 
45     //导出excel    
46     public function outexcel(){
47         $spreadsheet = new Spreadsheet();
48         $sheet = $spreadsheet->getActiveSheet();
49         $sheet->setCellValue('A1', 'Hello World !');
50         $writer = new Xlsx($spreadsheet);
51         $writer->save('hello world2.xlsx');
52     }
53 
54 
55 
56 }

 

posted on 2019-02-03 15:38  流芳  阅读(490)  评论(0编辑  收藏  举报