TP6导出excel并自定义导出项

目标:

我们在项目开发中经常会遇到导出excel的需求,下面就利用TP6完成这一需求,并实现自定义导出项。


1、 首先我们先利用composer安装我们需要的扩展

composer require phpoffice/phpspreadsheet

2、下面进入愉快的写代码时刻!!

<?php


namespace app\index\controller;

use think\facade\Db;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

/**
 * ClassName: Index
 * Description:
 * Date: 2021-11-06
 * Version:
 */
class Index
{

    /*
     * @param array $fields 字段, eg: ['字段1', '字段2'...]
     * @param string|null $filename 导出文件名
     * */
    public static function export(array $fields = [], string $filename = '123')
    {
        if (!is_array($fields)) {
            return false;
        }
        
        //首先我们先定义号每个字段的含义  键是数据库里的字段名  值是含义
        $field_title = [
            'id' => '编号',
            'username' => '用户名',
            'title' => '标题',
            'desc' => '简介',
            'content' => '内容'
        ];

        $field_res = [];

        //然后根据所需导出的字段组成相应的结果集
        foreach ($fields as $k => $v) {
            $field_res[$k]['title'] = $field_title[$v];
            $field_res[$k]['field'] = $v;
        }

		//查询数据
        $data = Db::name('user')->field($fields)->select()->toArray();
        
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        // sheet title
        $sheet->setTitle($filename);
        $startRow = 1; // 数据起始行
        foreach ($data as $key => $value) {
            foreach ($field_res as $k => $v) {
                $column = Coordinate::stringFromColumnIndex($k + 1);
                if ($key == 0) {
                    $sheet->setCellValue($column . $startRow, $v['title']);
                    $sheet->getColumnDimension($column)->setWidth(20);
                }
                $i = $key + 2; //表格是从2开始的
                //dd($v);
                $sheet->setCellValue($column . $i, $value[$v['field']]);
            }
        }
        $filename = urlencode($filename) . '.xlsx';
        // make file
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header("Content-Disposition: attachment;filename=$filename");
        header('Cache-Control: max-age=0');
        header('Pragma: public');
        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
        $writer->save('php://output');
        exit;
    }
}

Index::export(['id','username'],'123');

看代码我们可以看到,我们先根据字段和字段含义定义一个数组,然后我们根据我们需要导出的字段组合成相应的结果集

下面输出一下 $field_res 看一下

在这里插入图片描述

此时我们的导出excel已基本完成,下面我们执行一下看一看结果!
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值