thinkphp用phpexcel读取excel,并修改列中的值,再导出excel,带往excel里写入图片

<?php



class GetpriceAction extends AdministratorAction {



//    文件保存路径

    protected $savepath;

//    允许上传的文件类型

    protected $allowFileType;



    public function _initialize(){

        parent::_initialize();

        $this->savepath = './xxx/'.date('Ymd').'/';

        $this->allowFileType = array('xlsx','xls');

    }



    public function index(){

        $this->display();

    }





    public function upload(){

        $beginLine = intval($_POST['beginLine']);

        $bnCol = htmlspecialchars(strtoupper($_POST['bnCol']));

//        $numCol = htmlspecialchars(strtoupper($_POST['numCol']));



        if($beginLine<1){

            $this->dialogmessage('须正确填写开始行数','error');

        }

        if(!preg_match('/^[a-zA-Z]+$/',$bnCol)) {

            $this->dialogmessage('须正确填写货号所在列', 'error');

        }



        $savepath = $this->savepath;

        mk_dir($savepath);

        import("ORG.Net.UploadFile");

        $upload = new UploadFile();

        $upload->maxSize = 114570;

        $upload->allowExts = $this->allowFileType;

        $upload->savePath = $savepath.''; // 讴置附件上传目录

        if(!$upload->upload()){

            $this->dialogmessage($upload->getErrorMsg(),'excel');

            exit();

        }else{

            $fileInfo = $upload->getUploadFileInfo();

            $data = $this->editStore($fileInfo,$beginLine,$bnCol);

        }

        $this->assign($data);

        $this->display();

    }



    /**

     * $info

     *

     * @param $fileInfo

     * @param $beginLine

     * @param $bnCol

     * @return array

     */

    protected function editStore($fileInfo,$beginLine,$bnCol){

        require_once './excel/Classes/PHPExcel.php';

        $filePath = $fileInfo[0]['savepath'].$fileInfo[0]['name'];

        chmod($filePath,0777);

        //建立reader对象

        $PHPReader = new PHPExcel_Reader_Excel2007();

        if(!$PHPReader->canRead($filePath)){

            $PHPReader = new PHPExcel_Reader_Excel5();

            if(!$PHPReader->canRead($filePath)){

                $this->dialogmessage('no excel','error');

            }

        }



//建立excel对象,此时你即可以通过excel对象读取文件,也可以通过它写入文件

        $PHPExcel = $PHPReader->load($filePath);



        /**读取excel文件中的第一个工作表*/

        $currentSheet = $PHPExcel->getSheet(0);

        /**取得最大的列号*/

        $allColumn = $currentSheet->getHighestColumn();

        /**取得一共有多少行*/

        $allRow = $currentSheet->getHighestRow();

//循环读取每个单元格的内容。注意行从1开始,列从A开始

        $codes=array();

        for($rowIndex=$beginLine;$rowIndex<=$allRow;$rowIndex++){

            $bn=$currentSheet->getCell($bnCol.$rowIndex)->getValue();

            $b = $currentSheet->getCell('B'.$rowIndex)->getValue();

            $c = $currentSheet->getCell('C'.$rowIndex)->getValue();

            $d = $currentSheet->getCell('D'.$rowIndex)->getValue();

            $e = $currentSheet->getCell('E'.$rowIndex)->getValue();

            if($bn){

                $f = model('Product')->where('bn=\''.$bn.'\'')->getField('price');

                $codes[] = array('a'=>$bn,'b'=>$b,'c'=>$c,'d'=>$d,'e'=>$e,'f'=>$f);

            }

        }





$data['data'] = $codes;

        $data['title'] = array('货号','1','1','1','1','销售价');

        $data['width'] = array(30,30,30,30,30,30);

        $add = array();

        $add['ctime'] = time();

        $add['data'] = serialize($data);

        $add['title'] = '价格' . date('Ymdhis');

        $name = uniqid();

        $add['file'] = SITE_PATH . '/Public/excel/' . $name . '.xls';

        $add['url'] = SITE_URL . '/Public/excel/' . $name . '.xls';

        $add['uid'] = 1;

        $id = M('excel')->add($add);

        if ($id > 0) {

            pclose(popen('/usr/bin/php -f /xxx/exceltask.php ' . $id . ' &', 'r'));

            echo '导出任务成功,请等待系统完成';

            exit;

        } else {

            echo '导出任务失败';

            exit;

        }



    }



    /**

     * 写入日志

     * @param  Array $arrContent

     * @param  String $filename

     * @return int

     */

    protected function writeLog($arrContent,$filename){

        $intLogStatus = file_put_contents($this->savepath.$filename.'.php','<?php '.PHP_EOL.' return '.

var_export($arrContent,true).';');

        return $intLogStatus;

    }

} 
/xxx/exceltask.php

<?php

    error_reporting(0);

    date_default_timezone_set('RPC');

    define('SITE_PATH',dirname(__FILE__));

    include SITE_PATH.'/db.class.php';

    

    $id=intval($argv[1]);

    if($id<=0){

        exit();

    }



    $exceldata=M('excel')->where('id='.$id)->find();

    $data=unserialize($exceldata['data']);

    include SITE_PATH.'/libs/PHPExcel.php';

    $objExcel=new PHPExcel();

    $columns=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ','BA','BB','BC','BD','BE','BF','BG','BH','BI','BJ','BK','BL','BM','BN','BO','BP','BQ','BR','BS','BT','BU','BV','BW','BX','BY','BZ');

    $objExcel->getProperties()->setCreator("xxx");  

    $objExcel->getProperties()->setLastModifiedBy("xxx");  

    $objExcel->getProperties()->setTitle($title);  

    $objExcel->getProperties()->setSubject($title);  

    $objExcel->getProperties()->setDescription($title);  

    $objExcel->getProperties()->setKeywords($title);  

    $objExcel->getProperties()->setCategory($title);  

    $objExcel->setActiveSheetIndex(0);  

    foreach($data['title'] as $k=>$v){

        $objExcel->getActiveSheet()->setCellValue($columns[$k].'1',$v);  

    }

    if($data['width']){

        foreach($data['width'] as $k=>$v){

            $objExcel->getActiveSheet()->getColumnDimension($columns[$k])->setWidth($v);

        }

    }

    $i=2;

    foreach($data['data'] as $v){

        $v=array_values($v);

        foreach($v as $k=>$vv){

            preg_match_all('/http:\/\/img\.xxx\.com\//', $vv, $matches);

            if($matches[0]){

                $objExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(100);

                $objDrawing = new PHPExcel_Worksheet_Drawing();

                $file=SITE_PATH.'/tmp/'.uniqid().'.jpg';

                file_put_contents($file,file_get_contents($vv));

                $objDrawing->setPath($file);

                $objDrawing->setCoordinates($columns[$k].$i);

                $objDrawing->setOffsetX(10);

                $objDrawing->setOffsetY(10);

                $objDrawing->setWidth(100);

                $objDrawing->setHeight(100);

                $objDrawing->setWorksheet($objExcel->getActiveSheet());

                unset($objDrawing);



            }

            else{

                if(is_numeric($vv)){

                    //$vv=number_format($vv,2);

                    $objExcel->getActiveSheet()->setCellValueExplicit($columns[$k].$i,$vv);

                }

                else{

                    $objExcel->getActiveSheet()->setCellValueExplicit($columns[$k].$i,$vv,PHPExcel_Cell_DataType::TYPE_STRING);

                }

            }

            

        }    

        $i++;

    }

    $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');  

    $objWriter->save($exceldata['file']);

    M('excel')->where('id='.$id)->setField('endtime',time());  

    exit;  

?>

 

你可能感兴趣的:(thinkphp)