Fastadmin使用插件xlswriter导出数据

一、列表页增加导出按钮

index.html

<a href="javascript:;" class="btn btn-danger {$auth->check('client/export') ? '' : 'hide'}" id="excel_dc">{:__('导出')}</a>

对应JS文件的index方法中:

$('#excel_dc').click(function () {
    var url = 'client/export';
    window.open(url);
});

// 为表格绑定事件
Table.api.bindevent(table);

二、在 export() 查询并导出

use think\Db;
use Vtiful\Kernel\Excel;

public function export()
{
    // 查询数据
    $list = Db::table('fa_client')
        ->alias('c')
        ->join('admin a', 'a.id = c.admin_id')
        ->where('c.promotion_platform', '1')
        ->field('c.id, c.admin_id, c.account_id, c.account, c.accountname, c.authorization_id, c.adv_id, c.adv_name, c.mobile, c.promote_products, c.onlinetime, c.createtime, c.updatetime, c.promotion_platform, a.username as admin_username, a.nickname as admin_nickname')
        ->select();

    // Excel 表头
    $title = ['ID', '平台', '管理员ID', '管理员账号', '管理员昵称', '账户ID', '推广账号', '客户简称', '授权ID', '广告主ID', '广告主名称', '手机号', '推广产品', '上线时间', '创建时间', '更新时间'];

    // Excel 数据
    $data = [];

    foreach ($list as $row) {

        $data[] = [
            $row['id'],
            $row['promotion_platform'] == 1 ? 'JL' : '',
            $row['admin_id'],
            $row['admin_username'],
            $row['admin_nickname'],
            $row['account_id'],
            $row['account'],
            $row['accountname'],
            $row['authorization_id'],
            $row['adv_id'],
            $row['adv_name'],
            $row['mobile'],
            $row['promote_products'],
            $row['onlinetime'],
            date('Y-m-d H:i:s', $row['createtime']),
            date('Y-m-d H:i:s', $row['updatetime'])
        ];
    }

    // 文件名
    $filename = '客户数据';
    $filenames = $filename . '_' . date('Ymd_His') . '.xlsx';

    // 保存目录
    $paths = ROOT_PATH . 'public/export/';

    // 目录不存在则创建
    if (!is_dir($paths)) {
        mkdir($paths, 0755, true);
    }

    // XlsWriter 配置
    $config = [
        'path' => $paths
    ];

    // 创建 Excel
    $excel = new Excel($config);

    $excel->fileName($filename, '客户数据')
        ->header($title)
        ->data($data)
        ->output();

    // 下载地址
    $downloadUrl = '/export/' . $filename;

    echo '<a href="' . $downloadUrl . '" target="_blank">';
    echo '<h3>下载 ' . $filename . '</h3>';
    echo '</a>';

    exit;
}

三、如果数据比较多,应该使用游标/分批查询 + XlsWriter 分批写入

public function export()
{
    set_time_limit(0);

    // 导出目录
    $path = ROOT_PATH . 'public/export/';

    if (!is_dir($path)) {
        mkdir($path, 0755, true);
    }

    // 文件名
    $filename = '客户数据_' . date('Ymd_His') . '.xlsx';

    // XlsWriter
    $excel = new \Vtiful\Kernel\Excel([
        'path' => $path
    ]);

    // 表头
    $title = [
        'ID',
        '管理员ID',
        '账户ID',
        '账户',
        '账户名称',
        '授权ID',
        '广告ID',
        '广告名称',
        '手机号',
        '推广产品',
        '上线时间',
        '创建时间',
        '更新时间',
        '推广平台',
        '管理员账号',
        '管理员昵称',
    ];

    $excel->fileName($filename, '客户数据')
        ->header($title);

    // 每次查询 5000 条
    $pageSize = 5000;
    $lastId = 0;

    while (true) {

        $list = Db::table('rhtg_client')
            ->alias('c')
            ->join('admin a', 'a.id = c.admin_id', 'LEFT')
            ->where('c.promotion_platform', 1)
            ->where('c.id', '>', $lastId)
            ->field([
                'c.id',
                'c.admin_id',
                'c.account_id',
                'c.account',
                'c.accountname',
                'c.authorization_id',
                'c.adv_id',
                'c.adv_name',
                'c.mobile',
                'c.promote_products',
                'c.onlinetime',
                'c.createtime',
                'c.updatetime',
                'c.promotion_platform',
                'a.username' => 'admin_username',
                'a.nickname' => 'admin_nickname',
            ])
            ->order('c.id', 'ASC')
            ->limit($pageSize)
            ->select();

        if (empty($list)) {
            break;
        }

        $data = [];

        foreach ($list as $row) {

            $data[] = [
                $row['id'],
                $row['admin_id'],
                $row['account_id'],
                $row['account'],
                $row['accountname'],
                $row['authorization_id'],
                $row['adv_id'],
                $row['adv_name'],
                $row['mobile'],
                $row['promote_products'],
                $row['onlinetime'],
                date('Y-m-d H:i:s', $row['createtime']),
                date('Y-m-d H:i:s', $row['updatetime']),
                'JL',
                $row['admin_username'],
                $row['admin_nickname'],
            ];

            $lastId = $row['id'];
        }

        // 写入当前批次
        $excel->data($data);

        // 释放当前批次
        unset($list, $data);
    }

    // 输出文件
    $excel->output();

    // 下载地址
    $downloadUrl = '/uploads/client_export/' . $filename;

    echo '<a href="' . $downloadUrl . '" target="_blank">';
    echo '<h3>下载 ' . $filename . '</h3>';
    echo '</a>';

    exit;
}

内容概要:本文研究了一种基于生成对抗网络(GAN)的数据驱动可再生能源场景生成方法,通过构建两个互连的深度神经网络——生成器与判别器,实现对风电与光伏发电出力时间序列的高效建模。该方法克服了传统基于概率统计模型在刻画非线性、强波动性风光数据分布时的局限性,能够有效捕捉复杂的时空相关性与多模态特征,显著提升生成场景的真实性、多样性与时序一致性。研究重点采用Wasserstein GAN(W-GAN)架构,并结合Python编程实现模型训练与验证,展示了其在新能源功率预测、不确定性量化及电力系统优化调度中的应用潜力,配套提供了完整的代码资源以支持复现与拓展。; 适合人群:具备一定机器学习与深度学习基础,从事新能源发电预测、电力系统规划、微电网优化或不确定性建模等相关领域的科研人员、研究生及工程技术开发者;熟悉Python编程并希望将前沿深度学习模型应用于能源时间序列建模的专业人士。; 使用场景及目标:①应对风光发电强随机性与间歇性带来的建模挑战;②生成高质量、多样化的典型出力场景用于鲁棒优化、随机规划与机会约束调度;③支撑储能配置、电力市场仿真、需求响应等决策分析;④探索W-GAN在多变量时间序列生成中的结构设计与训练稳定性优化策略; 阅读建议:此资源强调理论与实践深度融合,建议读者在掌握GAN与Wasserstein距离基本原理的基础上,结合所提供的Python代码进行逐模块调试与实验分析,重点关注损失函数设计、梯度惩罚机制、模型收敛性判断及生成结果评估指标(如分布相似度、自相关性保持等),并可进一步迁移至其他高不确定性的能源数据生成任务中。
内容概要:本文系统研究了Picard迭代法在非线性常微分方程参数估计中的应用,提出了一种基于迭代逼近的参数辨识方法。通过构建微分方程的Picard序列逐步生成近似解析解,并结合实际观测数据,采用优化算法调整未知参数以最小化模拟值与实测值之间的残差,从而实现对模型参数的高精度估计。文章详细阐述了算法的数学原理、迭代流程设计及收敛性分析,配套提供了完整的Matlab实现代码,支持用户复现实验并拓展应用于其他非线性动力系统。该方法避免了传统数值积分带来的累积误差,具有理论严谨、实现简洁、适应性强的优点,特别适用于缺乏显式解的复杂微分方程建模任务。; 适合人群:具备常微分方程、数值分析基础及Matlab编程能力的理工科研究生、博士生和科研人员,尤其适合从事系统建模、动力学仿真、参数反演等相关领域研究的学者; 使用场景及目标:①解决非线性微分方程因无法解析求解而导致的参数估计难题;②在生物医学、环境科学、工程控制等领域中,从实验或观测数据中反演系统内在参数,提升模型预测能力与解释力; 阅读建议:建议读者结合文中公式推导与代码实现,逐轮观察Picard迭代过程中解的演化规律及参数更新路径,深入理解迭代法在耦合状态与参数联合估计中的作用机制,并尝试将其迁移至多变量、高阶或含噪声数据的实际应用场景中进行验证与改进。
内容概要:本文详细介绍了一个基于Java与Vue的企业知识问答系统的设计与实现,旨在解决企业知识分散、检索效率低、信息安全性差等问题。系统采用前后端分离架构,后端基于Spring Boot实现用户认证、权限控制、文档解析、向量检索与问答服务,前端使用Vue及相关生态构建可视化界面。核心技术采用检索增强生成(RAG)架构,结合文本分块、向量化、混合检索(关键词+语义)、重排序与大语言模型生成,确保答案基于企业内部知识,避免幻觉。系统支持多格式文档处理、权限隔离、敏感信息防护与问答可追溯,形成“知识采集—加工—检索—回答—优化”的闭环体系,适用于多行业场景。文中还提供了关键模块的算法描述与Java代码示例,如文本分块、余弦相似度计算、混合排序与提示词构造等,增强了项目的可实施性。; 适合人群:具备Java和Vue开发基础,熟悉Spring Boot、RESTful接口及基本前端框架的中初级软件工程师、全栈开发者,以及对企业知识管理系统、RAG技术落地感兴趣的技术人员;也适合高校学生作为毕业设计或课程项目参考。; 使用场景及目标:① 构建企业级智能问答平台,实现制度、流程、技术文档的自然语言查询;② 解决传统知识管理中语义检索不准、专业术语识别难、模型回答不可控等问题;③ 实践RAG架构在真实业务中的集成与优化,掌握文本向量化、混合检索、权限控制与安全生成等关键技术。; 阅读建议:建议结合代码示例与系统架构图进行理解,重点关注权限控制、混合检索策略与提示词设计等安全与准确性保障机制;在学习过程中可搭建本地环境进行功能验证,并根据实际业务需求调整分块策略、权重参数与安全规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

withoutfear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值