zoukankan      html  css  js  c++  java
  • 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 appindexcontroller;
     3 
     4 use thinkDb;
     5 use PhpOfficePhpSpreadsheetSpreadsheet;
     6 use PhpOfficePhpSpreadsheetWriterXlsx;
     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 = PhpOfficePhpSpreadsheetIOFactory::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 }
  • 相关阅读:
    C# is 与 as 运算符
    C# dynamic类型
    C# 数组
    C# 泛型
    C# 事件
    C# 委托
    C# DateTime类,TimeSpan类
    C# 获取当前应用程序的绝对路径支持asp.net
    C# 父子类_实例_静态成员变量_构造函数的执行顺序
    C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等
  • 原文地址:https://www.cnblogs.com/lijea/p/10350477.html
Copyright © 2011-2022 走看看