PhpExcel导出excel受保护不被编辑

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: faith
  5. * motto 学习可以改变自己
  6. * Date: 2020-02-24
  7. * Time: 22:25
  8. */
  9. namespace app\api\controller;
  10. use app\BaseController;
  11. use PHPExcel_IOFactory;
  12. use PHPExcel;
  13. use think\facade\Cache;
  14. class PhpToExcel extends BaseController {
  15.     /**
  16.      * 该方法是配合dataExportExcel 用作数据的缓存
  17.      * Created by PhpStorm.
  18.      * User: faith
  19.      * motto 学习可以改变自己
  20.      * Date: 2020-02-25
  21.      * Time: 00:31
  22.      * @return \think\response\Json
  23.      */
  24.     public function setDataRedis() {
  25.         $data_redis = isset($_REQUEST[‘data_redis’]) ? $_REQUEST[‘data_redis’] : ”;
  26.         if(empty($data_redis)) {
  27.             return setResponse(config("status.param_null"), "缺少参数data_redis", false);
  28.         }
  29.         $key = md5(uniqid(md5(microtime(true)),true));
  30.         Cache::set($key, $data_redis, 60);
  31.         return setResponse(config("status.success"),"导出excel缓存数据成功", $key);
  32.     }
  33.     /**
  34.      * 该方法是生成escel表格的
  35.      * Created by PhpStorm.
  36.      * User: faith
  37.      * motto 学习可以改变自己
  38.      * Date: 2020-02-25
  39.      * Time: 00:32
  40.      * @param array $data
  41.      * @param string $name
  42.      * @return \think\response\Json
  43.      * @throws \PHPExcel_Exception
  44.      * @throws \PHPExcel_Reader_Exception
  45.      * @throws \PHPExcel_Writer_Exception
  46.      */
  47.     public function dataExportExcel($data = http://www1.netvane.net/[],$name =’excel’) {
  48.         $data_redis_key = isset($_REQUEST[‘data_redis_key’]) ? $_REQUEST[‘data_redis_key’] : ”;
  49.         if(empty($data_redis_key)) {
  50.             return setResponse(config("status.param_null"), "缺少参数data_redis_key", false);
  51.         }
  52.         $res = Cache::get($data_redis_key);
  53.         if(empty($res)) {
  54.             return setResponse(config("status.no_find"), "没有找到对应的数据", false);
  55.         }
  56.         $user_arr = json_decode($res);
  57.         $excel = new \PHPExcel(); //引用phpexcel
  58.         iconv(‘UTF-8’, ‘gb2312’, $name); //针对中文名转码
  59.         $excel->setActiveSheetIndex(0);
  60.         $excel->getActiveSheet()->setTitle($name); //设置表名
  61.         $excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(18);
  62.         $excel->getActiveSheet()->getColumnDimension(‘B’)->setWidth(80);
  63.         //        $excel->getActiveSheet()->freezePaneByColumnAndRow(1,1);//冻结首列
  64.         $excel->getActiveSheet()->protectCells(‘A1:A2’, ‘order_id’);
  65.         //受保护的地址列
  66.         //$excel->getActiveSheet()->protectCells(‘A1:A7’, ‘password’);
  67.         //解除指定列锁定
  68.         // $excel->getActiveSheet()->getStyle(‘B1:B7’)->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
  69.         $excel->getActiveSheet()->getStyle(‘H’)->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
  70.         //设置sheet锁定属性
  71.         $excel->getActiveSheet()->getProtection()->setSheet(true);
  72.         // 设置单元格的宽度
  73.         $excel->getActiveSheet()->getColumnDimension(‘A’)->setWidth(15);#设置单元格宽度
  74.         $excel->getActiveSheet()->getColumnDimension(‘B’)->setWidth(30);#设置单元格宽度
  75.         $excel->getActiveSheet()->getColumnDimension(‘C’)->setWidth(30);#设置单元格宽度
  76.         $excel->getActiveSheet()->getColumnDimension(‘D’)->setWidth(15);#设置单元格宽度
  77.         $excel->getActiveSheet()->getColumnDimension(‘E’)->setWidth(15);#设置单元格宽度
  78.         $excel->getActiveSheet()->getColumnDimension(‘F’)->setWidth(15);#设置单元格宽度
  79.         $excel->getActiveSheet()->getColumnDimension(‘G’)->setWidth(15);#设置单元格宽度
  80.         $excel->getActiveSheet()->getColumnDimension(‘H’)->setWidth(15);#设置单元格宽度
  81.         //设置表头
  82.         $excel->setActiveSheetIndex(0)
  83.             ->setCellValue(‘A1’, ‘id’)
  84.             ->setCellValue(‘B1’, ‘合作方名称’)
  85.             ->setCellValue(‘C1’, ‘统一社会信用代码’)
  86.             ->setCellValue(‘D1’, ‘经营者’)
  87.             ->setCellValue(‘E1’, ‘联系方式’)
  88.             ->setCellValue(‘F1’, ‘任务领取时间’)
  89.             ->setCellValue(‘G1’, ‘结算月份’)
  90.             ->setCellValue(‘H1’, ‘结算金额’);
  91.         //写入数据
  92.         $data = http://www1.netvane.net/[[
  93.             "order_id" => 1,
  94.             "order_status" => 1,
  95.             "name" => 1,
  96.             "order_name" => 1,
  97.             "create_time" => 1,
  98.             "remark" => 1,
  99.             "poper_size" => 1,
  100.             "color_num" => 1,
  101.         ]];
  102.         foreach ($user_arr as $k => $v) {
  103.             //从第二行开始写入数据(第一行为表头)
  104.             //$excel->getActiveSheet()->setCellValue(‘A’.($k+2),$v[‘gid’]);
  105. //            $excel->getActiveSheet()->setCellValue(‘A’ . ($k + 2), $v[‘id’]."\t");
  106.             $excel->getActiveSheet()->setCellValue(‘A’ . ($k + 2), $v->id."\t");
  107.             $excel->getActiveSheet()->setCellValue(‘B’ . ($k + 2), $v->合作方名称);
  108.             $excel->getActiveSheet()->setCellValue(‘C’ . ($k + 2), $v->统一社会信用代码 ?: ”);
  109.             $excel->getActiveSheet()->setCellValue(‘D’ . ($k + 2), $v->经营者);
  110.             $excel->getActiveSheet()->setCellValue(‘E’ . ($k + 2), $v->联系方式);
  111.             $excel->getActiveSheet()->setCellValue(‘F’ . ($k + 2), $v->任务领取时间);
  112.             $excel->getActiveSheet()->setCellValue(‘G’ . ($k + 2), $v->结算月份);
  113.             $excel->getActiveSheet()->setCellValue(‘H’ . ($k + 2), $v->结算金额);
  114.         }
  115.         //设置单元格边框
  116.         $excel->getActiveSheet()->getStyle("A1:E" . (count($data) + 1))->getBorders()->getAllBorders()->setBorderStyle();
  117.         ob_end_clean();
  118.         header(‘Content-Type: application/vnd.ms-excel’);
  119.         header(‘Content-Disposition: attachment;filename="’ . $name . ‘.xls"’);
  120.         header(‘Cache-Control: max-age=0’);
  121.         $res_excel = PHPExcel_IOFactory::createWriter($excel, ‘Excel2007’);
  122.         $res_excel->save(‘php://output’);
  123.     }
  124. }

复制代码

发表回复