zoukankan      html  css  js  c++  java
  • thinkphp中如何使用phpspreadsheet插件

    thinkphp中如何使用phpspreadsheet插件

    一、总结

    一句话总结:多百度,百度什么都有

    1、thinkphp中用composer安装的插件的命名空间是什么?

    use PhpOfficePhpSpreadsheetSpreadsheet;
    use PhpOfficePhpSpreadsheetWriterXlsx;

    2、插件的代码实例哪里找?

    插件自带代码实例

    vendorphpofficephpspreadsheetsamples里面有例程,仔细看下

    3、在thinkphp中安装好了插件,我们需要在入口文件中require包么?

    不需要,thinkphp已经给我们做了

    注意:不需要自己在入口文件中再require包了

    第十八行代码不需要

     1 <?php
     2 // +----------------------------------------------------------------------
     3 // | ThinkPHP [ WE CAN DO IT JUST THINK ]
     4 // +----------------------------------------------------------------------
     5 // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
     6 // +----------------------------------------------------------------------
     7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
     8 // +----------------------------------------------------------------------
     9 // | Author: liu21st <liu21st@gmail.com>
    10 // +----------------------------------------------------------------------
    11 
    12 // [ 应用入口文件 ]
    13 
    14 // 定义应用目录
    15 define('APP_PATH', __DIR__ . '/../application/');
    16 // 加载框架引导文件
    17 require __DIR__ . '/../thinkphp/start.php';
    18 //require __DIR__ . '/../vendor/autoload.php';

    4、我们要调用自己安装的插件的类,use的格式是怎样的?

    其实use就是永远和文件的命名空间是相对应的

    直接看需要文件定义的命名空间:比如说下面第一个文件Spreadsheet的命名空间就是这个:namespace PhpOfficePhpSpreadsheet;

     6 use PhpOfficePhpSpreadsheetSpreadsheet;
     7 use PhpOfficePhpSpreadsheetWriterXlsx;

    二、TP5使用Composer安装PhpSpreadsheet类库实现导出Excel表并封装

    一、背景介绍:

    PhpSpreadsheet是PHPExcel的下一个版本。它打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。

    由于所有努力都转移到了PhpSpreadsheet,因此将不再维护PHPExcel。PHPExcel,补丁和新功能的所有贡献都应该针对PhpSpreadsheet开发分支。

    前提:TP5项目中已经安装配置好Composer 管理工具包。

    二、Composer 中文网 / Packagist 中国全量镜像https://www.phpcomposer.com/ 打开安装包列表搜索phpspreadsheet

    资源链接:https://packagist.org/packages/phpoffice/phpspreadsheet 复制命令composer require phpoffice/phpspreadsheet,

    在开发工具(比如:PHPSTORM)命令行(terminal)中执行;

    三、创建Office类文件并封装,在需要导出Excel表的地方引入即可:

    <?php
    
    namespace appindexcontroller;
    
    
    use PhpOfficePhpSpreadsheetSpreadsheet;
    use PhpOfficePhpSpreadsheetWriterXlsx;
    
    class Office
    {
    
        /**
         * 导出excel表
         * $data:要导出excel表的数据,接受一个二维数组
         * $name:excel表的表名
         * $head:excel表的表头,接受一个一维数组
         * $key:$data中对应表头的键的数组,接受一个一维数组
         * 备注:此函数缺点是,表头(对应列数)不能超过26;
         *循环不够灵活,一个单元格中不方便存放两个数据库字段的值
         */
        public function outdata($name='测试表', $data=[], $head=[], $keys=[])
        {
            $count = count($head);  //计算表头数量
    
            $spreadsheet = new Spreadsheet();
            $sheet = $spreadsheet->getActiveSheet();
    
            for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始,循环设置表头:
                $sheet->setCellValue(strtoupper(chr($i)) . '1', $head[$i - 65]);
            }
    
            /*--------------开始从数据库提取信息插入Excel表中------------------*/
    
    
            foreach ($data as $key => $item) {             //循环设置单元格:
                //$key+2,因为第一行是表头,所以写到表格时   从第二行开始写
    
                for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始:
                    $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys[$i - 65]]);
                    $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列宽
                }
    
            }
    
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="' . $name . '.xlsx"');
            header('Cache-Control: max-age=0');
            $writer = new Xlsx($spreadsheet);
            $writer->save('php://output');
    
            //删除清空:
            $spreadsheet->disconnectWorksheets();
            unset($spreadsheet);
            exit;
        }
    
    

    调用示例:

     
    $excel = new Office();
    
    //设置表头:
     $head = ['订单编号', '商品总数', '收货人', '联系电话', '收货地址'];
    
    //数据中对应的字段,用于读取相应数据:
    $keys = ['order_sn', 'num', 'consignee', 'phone', 'detail'];            
    
    $excel->outdata('订单表', $orders, $head, $keys);
    
    
    

     参考:TP5使用Composer安装PhpSpreadsheet类库实现导出Excel表并封装 - 逍逍逍遥虎的博客 - CSDN博客
    https://blog.csdn.net/qq_41962562/article/details/82315608

     

    三、TP5,用composer加载了phpSpreadSheet后怎么用呢?

    vendorphpofficephpspreadsheetsamples里面有例程,仔细看下

    use PhpOfficePhpSpreadsheetSpreadsheet;
    use PhpOfficePhpSpreadsheetWriterXlsx;

     1 use PhpOfficePhpSpreadsheetIOFactory;
     2 $path = ROOT_PATH . "public/" . $filename;
     3 setlocale(LC_ALL, 'zh_CN');  //csv中文乱码
     4 $inputFileType = IOFactory::identify($path);
     5 $excelReader = IOFactory::createReader($inputFileType);
     6 if ($inputFileType == 'Csv') {   //csv文件读取设置
     7   $excelReader->setInputEncoding('GBK');
     8   $excelReader->setDelimiter(',');
     9 }
    10 $phpexcel = $excelReader->load($path);
    11 $activeSheet = $phpexcel->getActiveSheet();
    12 $sheet = $activeSheet->toArray();
    上面一个是读取,写出的代码就不贴了,找下phpexcel的改下命名空间就差不多了,
     
    1 use PhpOfficePhpSpreadsheetSpreadsheet;
    2 use PhpOfficePhpSpreadsheetIOFactory;

    四、自己测试实例(亲测通过)

    比如我们现在在thinkphp5中要用phpspreadsheet插件

    第一步:找到插件官网的composer安装方法

    Installation

    Use composer to install PhpSpreadsheet into your project:

    composer require phpoffice/phpspreadsheet
    

    Note: If you want the unreleased, unstable development version use phpoffice/phpspreadsheet:dev-develop instead.

    第二步:在我们tp5系统的更目录下打开cmd命令行,运行这句话(要先在电脑上面装composer)

    第三步:直接use包运行实例,不需要引(require)包(thinkphp已经帮我们做了,再引会造成一些方法重复定义)

    这样直接就用了

     1 <?php
     2 namespace appadmincontroller	estphpspreadsheet;
     3 
     4 use appadmincontrollerBase;
     5 
     6 use PhpOfficePhpSpreadsheetSpreadsheet;
     7 use PhpOfficePhpSpreadsheetWriterXlsx;
     8 
     9 class Index extends Base
    10 {
    11     public function index()
    12     {
    13         $spreadsheet = new Spreadsheet();
    14         $sheet = $spreadsheet->getActiveSheet();
    15         $sheet->setCellValue('A1', 'Hello World !');
    16 
    17         $writer = new Xlsx($spreadsheet);
    18         $writer->save('d://hello world.xlsx');
    19         //dump('2222222222');die;
    20         //return view();
    21     }
    22 }

    注意:不需要自己在入口文件中再require包了

    第十八行代码不需要

     1 <?php
     2 // +----------------------------------------------------------------------
     3 // | ThinkPHP [ WE CAN DO IT JUST THINK ]
     4 // +----------------------------------------------------------------------
     5 // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
     6 // +----------------------------------------------------------------------
     7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
     8 // +----------------------------------------------------------------------
     9 // | Author: liu21st <liu21st@gmail.com>
    10 // +----------------------------------------------------------------------
    11 
    12 // [ 应用入口文件 ]
    13 
    14 // 定义应用目录
    15 define('APP_PATH', __DIR__ . '/../application/');
    16 // 加载框架引导文件
    17 require __DIR__ . '/../thinkphp/start.php';
    18 //require __DIR__ . '/../vendor/autoload.php';
     
     
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9744017.html
Copyright © 2011-2022 走看看