PHPEXCEL 下拉框功能


這個拓展的下拉框分兩種,一種比較簡單的,像“是”或“否”的,這種,直接定義就好了,但是這種只適合下拉框選項少的,多的不行。

另外一種是屬於量大的,像一個下拉框有幾十個,幾百個的,就需要先把數據存在另外一個表格里面,然后再關聯讀取。

以下直接上代碼:

//導入模板
  public function mould()
  {
        $title = "貨品批量導入表格";
        $cellName = [
            '單品名稱', '單品編碼', '單品規格', '單品單位',
            '網購地址', '單品類別', '固定資產', '專屬機構',
            '供應商', '總部成本', '校區成本', '供應商報價',
            '學員價', '普通價', '小店成本價', '最低轉賣價',
        ];//表頭及字段名

        $branch = M('branch') -> where(['branch_name'=>['NEQ','']]) -> getField('branch_name',true);
        $supplier = M('supplier') -> where(['status'=>1,'supplier_name'=>['NEQ','']]) ->getField('supplier_name',true);
        $goods_type = M('goods_type') -> where(['pid'=>0]) -> getField('type_name',true);


        $spectials = [
//          ['column'=>'F','select_options'=>$goods_type],//貨品類型
            ['column'=>'G','select_options'=>['','']],//固定資產
//          ['column'=>'H','select_options'=>$branch],//專屬機構
//          ['column'=>'I','select_options'=>$supplier],//供應商
        ];

        //引入核心文件
        vendor("PHPExcel.PHPExcel");
        $objPHPExcel = new \PHPExcel();
        //定義配置
        $topNumber = 2;//表頭有幾行占用
        $xlsTitle = iconv('utf-8', 'gb2312', $title);//文件名稱
        $fileName = $title.date('_Ymd');//文件名稱
        $cellKey = array(
            'A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P'
        );
        //----------------------------------主表------------------------------------//
        //處理表頭標題
        $objPHPExcel->getActiveSheet()->mergeCells('A1:'.$cellKey[count($cellName)-1].'1');//合並單元格(如果要拆分單元格是需要先合並再拆分的,否則程序會報錯)
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',$title);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);

        //處理表頭
        foreach ($cellName as $k=>$v)
        {
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellKey[$k].$topNumber, $v);//設置表頭數據
            $objPHPExcel->setActiveSheetIndex(0)->freezePane('A3');//凍結窗口
            $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getFont()->setBold(true);//設置是否加粗
            $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
            $objPHPExcel->getActiveSheet()->getColumnDimension($cellKey[$k])->setWidth(15);//設置列寬度
        }

      //----------------------------------主表------------------------------------//

     //----------------------------------數據源-----------------------------------//
      $objPHPExcel->createSheet();
      $subObject = $objPHPExcel->getSheet(1);
      $subObject->setTitle('data');
      foreach ($branch as $key => $value){
          $subObject->setCellValue('A'.$key,$value);
      }
      foreach ($supplier as $key => $value){
          $subObject->setCellValue('B'.$key,$value);
      }
     foreach ($goods_type as $key => $value){
          $subObject->setCellValue('C'.$key,$value);
     }

     $subObject->getColumnDimension('A')->setWidth(30);
     $subObject->getColumnDimension('B')->setWidth(30);
     $subObject->getColumnDimension('C')->setWidth(30);
     $subObject->getProtection()->setSheet(true);
     $subObject->protectCells('A1:C1000','admin123');
     //----------------------------------數據源-----------------------------------//

//---------------------------------設置下拉框-----------------------------------// //-------簡單的固定值--------// $objActSheet = $objPHPExcel->getActiveSheet(); foreach($spectials as $spectial) { $optionsString = null; $optionsString = implode(',', $spectial['select_options']); $n = 0; $num = 500; // 我這里設置1000行,可自行設置 while($n < $num) { $objValidation = $objActSheet->getCell($spectial['column'].(string)$n)->getDataValidation(); //這一句為要設置數據有效性的單元格 // $objValidation的各項設置參數可詳見phpexcel文件, // 目錄大概為/.../phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5/Worksheet.php // 2767行 方法名:writeDataValidity $objValidation -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST) -> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_STOP) -> setAllowBlank(true) -> setShowInputMessage(true) -> setShowErrorMessage(true) -> setShowDropDown(true) -> setErrorTitle('輸入的值有誤') -> setError('您輸入的值不在下拉框列表內.') -> setPromptTitle('') -> setPrompt('') -> setOperator(\PHPExcel_Cell_DataValidation::OPERATOR_BETWEEN) -> setFormula1('"'.$optionsString.'"'); $n++; } } //-------簡單的固定值--------// //-----------復雜的-------------// $n = 0; while ($n<$num) { $objActSheet->getCell('Z'.(string)$n)->getDataValidation() -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST) -> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION) -> setAllowBlank(false) -> setShowInputMessage(true) -> setShowErrorMessage(true) -> setShowDropDown(true) -> setErrorTitle('輸入的值有誤') -> setError('您輸入的值不在下拉框列表內.') -> setPromptTitle('專屬機構') -> setFormula1('data!$A$1:$A$'.count($branch)); $n++; }
$n
= 0; while ($n<$num) { $objActSheet->getCell('I'.(string)$n)->getDataValidation() -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST) -> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION) -> setAllowBlank(false) -> setShowInputMessage(true) -> setShowErrorMessage(true) -> setShowDropDown(true) -> setErrorTitle('輸入的值有誤') -> setError('您輸入的值不在下拉框列表內.') -> setPromptTitle('供應商') -> setFormula1('data!$B$1:$B$'.count($supplier)); $n++; }
$n
= 0; while ($n<$num) { $objActSheet->getCell('F'.(string)$n)->getDataValidation() -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST) -> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION) -> setAllowBlank(false) -> setShowInputMessage(true) -> setShowErrorMessage(true) -> setShowDropDown(true) -> setErrorTitle('輸入的值有誤') -> setError('您輸入的值不在下拉框列表內.') -> setPromptTitle('供應商') -> setFormula1('data!$C$1:$C$'.count($goods_type)); $n++; } //-----------復雜的-------------//

//導出execl header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"'); header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; }

參考:

https://www.cnblogs.com/heijinli/p/11044211.html

https://blog.csdn.net/qq_41277856/article/details/103634056

https://blog.csdn.net/lxw1844912514/article/details/100026623


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM