我爱自学

 找回密码
 会员注册

QQ登录

只需一步,快速开始

Thinkphp5.1引入及使用phpspreadsheet

公司业务管理需要将数据库中的数据查询出来,导出Excel。本文分享在thinkphp框架下如何引入phpspreadsheet,查询数据库并导出数据。
PhpSpreadsheet是一个读取和写入电子表格文件的纯PHP库。允许您读取和写入不同的电子表格文件格式, 如Excel和Lireffice Calc。PhpSpreadsheet是PHPExcel的升级版本,支持了PHP7的一些特性。PHPExcel已经没有维护了,因此推荐使用Phpspreadsheet。

本文分享在本地环境Thinkphp中引入phpspreadsheet并导出数据:

1、获取phpspreadsheet

① 小编尝试了从github下载和composer下载后移动到thinkphp项目下,但是将phpspreadsheet引入thinkphp有些麻烦。需要单独使用require加文件路径的方式引入,容易发生错误。

② 建议将composer设置为全局使用,切换到thinkphp项目下,再使用composer 获取phpspreadsheet库。这样Thinkphp可以帮你完成引入操作,可以方便的使用。(Composer全局设置方法

composer获取phpspreadsheet的命令:
composer require phpoffice/phpspreadsheet

2、引入phpspreadsheet及实例化

<?php
namespace app\admin\controller;
use think\Controller;
use think\View;
use app\index\model\Inform;
use PhpOffice\PhpSpreadsheet\Spreadsheet;  //引入PhpSpreadSheet
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;  //引入PhpSpreadSheet

$spreadsheet = new Spreadsheet(); //PhpSpreadSheet实例化

3、查询数据库数据,并导出Excel文件

//从数据库查询需要的数据
        $data = Inform::where([
                'status' =>-1
            ])
             ->order('id','desc')
             ->select();
        // Create new Spreadsheet object
        $spreadsheet = new Spreadsheet();
        // Add title
        $spreadsheet->setActiveSheetIndex(0)
            ->setCellValue('A1', 'ID')
            ->setCellValue('B1', '大类型')
            ->setCellValue('C1', '中类型')
            ->setCellValue('D1', '小类型')
            ->setCellValue('E1', '名称')
            ->setCellValue('F1', '网址')
            ->setCellValue('G1', '描述');
        // Rename worksheet
        $spreadsheet->getActiveSheet()->setTitle('待审核数据');

        $i = 2;//第一行标题使用了,因此需要从2开始
        foreach ($data as $rs) {
            // Add data
            $spreadsheet->getActiveSheet()
                ->setCellValue('A'.$i, $rs['id'])
                ->setCellValue('B'.$i, $rs['type'])
                ->setCellValue('C'.$i, $rs['category']['text'])
                ->setCellValue('D'.$i, $rs['smalltype'])
                ->setCellValue('E'.$i, $rs['name'])
                ->setCellValue('F'.$i, $rs['url'])
                ->setCellValue('G'.$i, $rs['des']);
            $i++;
        }
        //Set width
        $spreadsheet->getActiveSheet()
            ->getColumnDimension('A')
            ->setWidth(15);
        $spreadsheet->getActiveSheet()
            ->getColumnDimension('B')
            ->setWidth(15);
        $spreadsheet->getActiveSheet()
            ->getColumnDimension('C')
            ->setWidth(60);
        $spreadsheet->getActiveSheet()
            ->getColumnDimension('D')
            ->setWidth(15);
        $spreadsheet->getActiveSheet()
            ->getColumnDimension('E')
            ->setWidth(20);
        $spreadsheet->getActiveSheet()
            ->getColumnDimension('F')
            ->setWidth(20);
        $spreadsheet->getActiveSheet()
            ->getColumnDimension('G')
            ->setWidth(20);

        // Set alignment
        $spreadsheet->getActiveSheet()->getStyle('A1:G'.$i)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
        $spreadsheet->getActiveSheet()->getStyle('C2:C'.$i)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);

        // Set active sheet index to the first sheet, so Excel opens this as the first sheet
        $spreadsheet->setActiveSheetIndex(0);
        return $this->exportExcel($spreadsheet, 'xls', '登陆日志');
}

/**
    * 导出Excel
    * @param  object $spreadsheet  数据
    * @param  string $format       格式:excel2003 = xls, excel2007 = xlsx
    * @param  string $savename     保存的文件名
    * @return filedownload         浏览器下载
    */
    function exportExcel($spreadsheet, $format = 'xls', $savename = 'export') {
        if (!$spreadsheet) return false;
        if ($format == 'xls') {
            //输出Excel03版本
            header('Content-Type:application/vnd.ms-excel');
            $class = "\PhpOffice\PhpSpreadsheet\Writer\Xls";      
        } elseif ($format == 'xlsx') {
            //输出07Excel版本
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            $class = "\PhpOffice\PhpSpreadsheet\Writer\Xlsx";
        }
        //输出名称
        header('Content-Disposition: attachment;filename="'.$savename.'.'.$format.'"');
        //禁止缓存
        header('Cache-Control: max-age=0');
        $writer = new $class($spreadsheet);
        $filePath = env('runtime_path')."temp/".time().microtime(true).".tmp";
        $writer->save($filePath);
        readfile($filePath);
        unlink($filePath);
  }

需要注意的是setCellValue('A'.$i, $rs['id']),第二个参数需要是字符串,不能是数组。

以上就是Thinkphp5.1引入及使用phpspreadsheet的方法。


点击阅读更多内容!
如果您觉得文章内容帮助到了您,不妨点点感兴趣的广告。感谢您的支持!

微信扫一扫打赏

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

手机版|小黑屋|我爱自学 ( 蜀ICP备19015358号-3 )

GMT+8, 2024-4-27 01:11 , Processed in 0.071973 second(s), 53 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

本站大部分教程是网站原创教程,一部分教程为我爱自学(http://www.5izixue.com)编辑收集整理。

如果您需要转载我爱自学网站教程,请注明“资料来源:我爱自学(5izixue)”字样并注明本站网址。

编辑收集整理的教程版权归原作者所有,本站只提供网友交流学习使用,请勿用于商业用途,如果该文章有任何侵犯您权益的地方,请联系我们(569705694@qq.com),我们将在第一时间进行处理!谢谢您的支持!

快速回复 返回顶部 返回列表