欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHPExcel

程序员文章站 2022-03-09 23:13:03
...

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

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

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

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


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

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

PHPExcel

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

PHPExcel

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

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

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

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

<?php
namespace app\admin\controller;

use think\Loader;
use think\Controller;

class Excel extends Controller
{
    //导出excel
    public function educe()
    {
        $path = dirname(__FILE__);//找到当前脚本所在路径
        Loader::import('PHPExcel.Classes.PHPExcel');
        Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
        $PHPExcel = new \PHPExcel();
        $PHPSheet = $PHPExcel->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

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