Skip to content

后台导出excel功能,结合前端导出组件,支持同步/异步、分页查询、定义导出文件格式等功能。

使用新版phpspreadsheet导出,支持多样化的导出功能,后台导出基于框架核心ExportExcelService封装,文件位置:tmcore\services\ExportExcelService.php

导出函数

admin后台导出函数,文件路径:app/admin/service/ExportService.php

/**
 * excel 导出
 * @param array $data 数据(支持分页)
 * @param string $file_name 文件名称
 * @param array $header 导出表头
 * @param array $action_info 说明内容 ['name'=>'操作者','time'=>'','mobile'=> '']
 * @param array $async_fun 异步调用方法 (可不传,系统自动生成) ['class_name'=>'类','method_name'=>'方法']
 * @return array|boolean
 */
public static function exportExcel($data, $file_name, $header, $action_info = [], $async_fun = [])

导出分页函数,数据库模型静态调用

/**
 * 导出分页函数(支持导出预览)
 * @param array $export_params 导出参数
 * @param array $where 查询条件
 * @param array $page limit-分页条数 page-分页页数
 * @param string $field 返回字段
 * @param array $order 排序
 * @param array $append 关联属性
 * @param array $with 关联查询
 * @return array
 */
public static function exportPage($export_params, $where, $page = ['limit' => '1000'], $field = '*', $order = ['id'=>'desc'], $append = [], $with = [])

调用示例

以后台admin模块的ArticleService为例,导出文章列表

<?php

namespace app\admin\service\cms;

use tmcore\base\BaseService;
use app\common\model\article\Article;
use app\admin\service\ExportService;
use tmcore\services\ImportExcelService;

class ArticleService extends BaseService
{
    /**
     * 导出文章
     * @param array $params
     * @param array $adminInfo
     * @return array|bool
     */
    public static function export(array $params, array $adminInfo)
    {
        // 搜索条件
        $searchParam = [
            '=' => ['status'],
            '%like%' => ['title']
        ];

        $where = self::getSearchData($searchParam, $extend_where, $params);
        $list = Article::exportPage(self::getExportData($params), $where, self::getPageData(), "*", ['sort' => 'desc', 'id' => 'desc'],  ['hits', 'status_desc']);
        $filename = $params['file_name'] ?? '文章列表';
        $header = [
            'id' => 'ID',
            'title' => '标题',
            'cate_name' => '栏目',
            'image' => '封面',
            'author' => '作者',
            'hits' => '点击量',
            'init_hits' => '初始点击量',
            'sort' => '排序',
            'recommend_desc' => '是否推荐',
            'status_desc' => '状态',
            'create_time' => '创建时间',
        ];
        $res = ExportService::exportExcel($list, $filename, $header, ['name' => $adminInfo['name'], 'id' => $adminInfo['id']]);

        if ($res === false) {
            return self::setError(ExportService::getError());
        } else {
            return $res;
        }
    }
}

调用框架核心ExportExcelService示例

<?php

namespace app\admin\service;

use tmcore\base\BaseService;
use tmcore\services\ExportExcelService;

class ExportService extends BaseService
{
    /**
     * 执行导出操作
     * @param $data
     * @param $file_name
     * @param $file_suffix
     * @param $header
     * @param array $action_info
     * @return array
     */
    public static function executeExportExcel($data, $file_name, $file_suffix, $header, $action_info = []) {
        $instance = ExportExcelService::instance(); // 实例化导出类
        $identifier = $instance->getIdentifier(); // 生成导出唯一标识
        $url = $instance
            ->setHeader($header) // 设置表头
            ->setTitle($file_name,$action_info) // 设置标题信息
            ->setData($data) // 设置数据
            ->exportExcel($file_name,$file_suffix); // 设置名称、文件后缀
        $file_name = $instance->getFileName(); // 获取文件名
        return ['url' => $url, 'file_key' => $identifier, 'file_name' => $file_name];
    }
}

Released under the Apache-2.0 License.