PHPExcel

吾生也有涯,而知也无涯~欢迎优化补充、指正!

(直接复制demo即可使用,或者单独粘贴相应片段!)

*本文是在tp5下进行编译与调试的,其他框架原理相同、请自行调整。

*本文包括PHPExcel上传与下载,具体在demo中体现


首先下载PHPExcel源文件(本例采用github下载)

1.访问https://github.com/PHPOffice/PHPExcel 下载压缩包

PHPExcel_第1张图片

2.解压后将PHPExcel 文件保存到extend下

PHPExcel_第2张图片

 3.此时就可以开始使用了

由于PHPExcel不像tp框架的其他文件那样设置有命名空间,此处采用Loader::import引入文件

 Loader::import('PHPExcel.Classes.PHPExcel');
 Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');

接下来不再冗述直接上demo 方便大家使用(抛转引玉,大家魔改就好)

getActiveSheet();
        $PHPSheet->setTitle("demo");
        $PHPSheet->setCellValue("A1","创建时间")
                 ->setCellValue("B1","订单编号")
                 ->setCellValue("C1","收件人")
                 ->setCellValue("D1","电话")
                 ->setCellValue("E1","地址");
        $PHPSheet->setCellValue("B2","选填,方便查询")
                 ->setCellValue("C2","必填")
                 ->setCellValue("D2","必填")
                 ->setCellValue("E2","河南省 郑州市 二七区 商阜新村三号楼 1单元 301户 示例必填");
        $PHPSheet->getColumnDimension('B')->setWidth('20'); //设置相应的列宽
        $PHPSheet->getColumnDimension('D')->setWidth('20'); 
        $PHPSheet->getColumnDimension('E')->setWidth('60');
        $this->cellColor($PHPSheet,'A1:E1','FF9900');//设置背景颜色
        $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,"Excel2007");
        header('Content-Disposition: attachment;filename="收件人模板.xlsx"');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        $PHPWriter->save("php://output");
    }
    //改变颜色
    public function cellColor($PHPSheet,$cells,$color){
        $PHPSheet->getStyle($cells)->getFill()->applyFromArray(array(
            'type' => \PHPExcel_Style_Fill::FILL_SOLID,
            'startcolor' => array(
                 'rgb' => $color
            )
        ));
    }
    //导入excel
    public function intoExcel()
    {
        Loader::import('PHPExcel.Classes.PHPExcel');
        Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
        $file = request()->file('excel');
        $info = $file->validate(['ext'=>'xlsx,xls,csv'])->move(ROOT_PATH . 'public' . DS . 'uploads');
        if ($info) {
            $exclePath = $info->getSaveName();
            $file_name = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath;
            //根据excel文件不同后缀选择不同提交方式
            $extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
            if ($extension =='xlsx') {
                $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
                $obj_PHPExcel = $objReader ->load($file_name, $encode = 'utf-8');
            } else if ($extension =='xls') {
                $objReader = \PHPExcel_IOFactory::createReader('Excel5');
                $obj_PHPExcel = $objReader ->load($file_name, $encode = 'utf-8');
            } else if ($extension=='csv') {
                $objReader = \PHPExcel_IOFactory::createReader('CSV');
                //默认输入字符集
                $objReader->setInputEncoding('GBK');
                //默认的分隔符
                $objReader->setDelimiter(',');
                //载入文件
                $obj_PHPExcel = $objReader->load($file_name);
            }
            $excel_array=$obj_PHPExcel->getsheet(0)->toArray();
            return $excel_array;
        } else {
            return $file->getError();
        }
    }
}

*$PHPSheet->setCellValue()用来填充相应位置的内容。

例子所示数据有限,当然你可以循环输出多量数据或者通过formArray()从数组获取并填充到表格

$PHPSheet->formArray($array,null,'A1');

$array:数据来源数组

A1:起始填充位置

例:

$array = [
            '0'=>['01','02','03'],
            '1'=>['11','12'],
            '2'=>['21']
        ];

如上$array,输出后excel表格如下:

PHPExcel_第3张图片

PHPExcel的基本用法就介绍到这里,如果有什么疑惑可以联系本人! 

你可能感兴趣的:(PHP,tp5,PHPExcel)