phpspreadsheet读取Excel数据存入mysql

论坛 期权论坛     
选择匿名的用户   2021-5-30 02:05   417   0
<pre class="blockcode"><code>&lt;?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/9/27
* Time: 13:57
*/

namespace site\admin\model;

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use system\library\AliYunOSS;
use system\library\Unzip;

class ProductBatchModel extends \site\admin\component\Model
{
   
    public function add($data){
        
        if (!$this-&gt;_validate($data, &#39;add&#39;)) {
            return false;
        }
        
        $languageModel &#61; new LanguageModel();
        $categoryModel &#61; new CategoryModel();
        $productModel &#61; new ProductModel();
        $urlAliasModel &#61; new UrlAliasModel();
        
        if(substr(strrchr($data[&#39;excel_file&#39;], &#39;.&#39;), 1)&lt;&gt;&#39;xlsx&#39;){
            $this-&gt;addError(&#39;excel_file&#39;, &#39;请上传xlsx格式的Excel文件&#39;);
            return false;
        }
        
        $arr_file &#61; explode(&#39;com/&#39;, $data[&#39;excel_file&#39;]);
        
        $reader &#61; \PhpOffice\PhpSpreadsheet\IOFactory::createReader(&#39;Xlsx&#39;);
        $reader-&gt;setReadDataOnly(TRUE);
        $spreadsheet &#61; $reader-&gt;load(DIR_UPLOAD.$arr_file[1]); //载入excel表格
        
        $worksheet &#61; $spreadsheet-&gt;getActiveSheet();
        $highestRow &#61; $worksheet-&gt;getHighestRow(); // 总行数
        $highestColumn &#61; $worksheet-&gt;getHighestColumn(); // 总列数
        $highestColumnIndex &#61; \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5
        
        $lines &#61; $highestRow - 1;
        if ($lines &lt;&#61; 0) {
            $this-&gt;addError(&#39;Excel&#39;, &#39;Excel表格中没有数据&#39;);
            return false;
        }
        
        $enableRow &#61; array();
        $arr_url &#61; array();
        
        for ($row &#61; 2; $row &lt;&#61; $highestRow; &#43;&#43;$row) {
            
            /******************************验证产品型号***********************************/
            
            $model_no &#61; $worksheet-&gt;getCellByColumnAndRow(1, $row)-&gt;getValue();
            if(empty($model_no)){
                $this-&gt;addError(&#39;model_no&#39;.$row, &#39;第&#39;.$row.&#39;行产品型号为空&#39;);
            }else{
                $if_exist &#61; $productModel-&gt;getProductByModel($model_no);
                if(empty($if_exist)){
                    $enableRow[] &#61; $row; //新增该行
                }
            }
            
               
            /******************************验证产品分类***********************************/
            
            $category_name &#61; $worksheet-&gt;getCellByColumnAndRow(2, $row)-&gt;getValue();
            if(empty($category_name)){
                $this-&gt;addError(&#39;category_name&#39;.$row, &#39;第&#39;.$row.&#39;行分类名为空&#39;);
            }else{
                $category &#61; $categoryModel-&gt;getCategoryIdByName($category_name);
                if(empty($category)){
                    $this-&gt;addError(&#39;category_name&#39;.$row, &#39;第&#39;.$row.&#39;行分类名不存在&#39;);
                }
            }
            
               
            $sort_order &#61; $worksheet-&gt;getCellByColumnAndRow(3, $row)-&gt;getValue();
            if(empty($sort_order) || !is_numeric($sort_order)){
                $this-&gt;addError(&#39;sort_order&#39;.$row, &#39;第&#39;.$row.&#39;行排序错误&#39;);
            }
            
            $status &#61; $worksheet-&gt;getCellByColumnAndRow(4, $row)-&gt;getValue();
            if(empty($status) || !is_numeric($status)){
                $this-&gt;addError(&#39;status&#39;.$row, &#39;第&#39;.$row.&#39;行状态错误&#39;);
            }
               
            /******************************验证语言***********************************/
            
            $language_name &#61; $worksheet-&gt;getCellByColumnAndRow(5, $row)-&gt;getValue();
            if(empty($language_name)){
                $this-&gt;addError(&#39;language_name&#39;.$row, &#39;第&#39;.$row.&#39;行语言为空&#39;);
            }else{
                $languages &#61; $languageModel-&gt;getSysLanguageByName($language_name);
                if(empty($languages)){
                    $this-&gt;addError(&#39;languages&#39;.$row, &#39;第&#39;.$row.&#39;行语言不存在&#39;);
                }
            }
            
               
            $name &#61; $worksheet-&gt;getCellByColumnAndRow(6, $row)-&gt;getValue();
            if(empty($name)){
                $this-&gt;addError(&#39;name&#39;.$row, &#39;第&#39;.$row.&#39;行名称为空&#39;);
            }
            
            $keywords &#61; $worksheet-&gt;getCellByColumnAndRow(7, $row)-&gt;getValue();
            if(empty($keywords)){
                $this-&gt;addError(&#39;keywords&#39;.$row, &#39;第&#39;.$row.&#39;行关键词为空&#39;);
            }
            
            $url &#61; $worksheet-&gt;getCellByColumnAndRow(10, $row)-&gt;getValue();
            if(!empty($url)){
                if(in_array($url, $arr_url)){
                    $this-&gt;addError(&#39;url&#39;.$row, &#39;第&#39;.$row.&#39;行网址重复出现&#39;);
                }else{
                    $arr_url[] &#61; $url;
                }
            }

        }
        
        if($this-&gt;hasErrors()){
            return false;
        }

        //组装数组
        $enableData &#61; array();
        foreach ($enableRow as $key &#
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP