Fastadmin Excel 导入实现

本文为整理项目开发中使用Fastadmin Excel实现导入功能的笔记

目录

实现导入

文件类型设置

增加导入按钮

增加导入方法

总结


实现导入

导出功能不用做,默认就可以导出;但导入就需要加载配置和结合业务进行处理。

文件类型设置

在application/extra/upload.php中设置可上传文件类型,

增加csv/xls/xlsx类型,如下:

php 复制代码
/**
 * 可上传的文件类型
 * 如配置允许 pdf,ppt,docx,svg 等可能含有脚本的文件时,
 * 请先从服务器配置此类文件直接下载而不是预览
 */
'mimetype'  => 'jpg,png,bmp,jpeg,gif,webp,zip,rar,wav,mp4,mp3,webm,csv,xls,xlsx',

增加导入按钮

在列表(index.html)文件中增加导入按钮,如下:

php 复制代码
{:build_toolbar('import')}

位置如下图:

效果如下图:

增加导入方法

在控制器中增加导入方法,获取导入文件,读取文件中的数据,并处理导入到数据表中。

如下:

php 复制代码
/**
 * 导入
 *
 * @return void
 * @throws PDOException
 * @throws BindParamException
 */
public function import()
{
    $file = $this->request->request('file');
    if (!$file) {
        $this->error(__('Parameter %s can not be empty', 'file'));
    }
    $filePath = ROOT_PATH . DS . 'public' . DS . $file;
    if (!is_file($filePath)) {
        $this->error(__('No results were found'));
    }

    // 实例化reader
    $ext = pathinfo($filePath, PATHINFO_EXTENSION);
    if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {
        $this->error(__('Unknown data format'));
    }

    try {
        // 加载文件
        if (!$spreadsheet = IOFactory::load($filePath)) {
            $this->error(__('Unknown data format'));
        }
        $sheet = $spreadsheet->getActiveSheet();
        $data = [];
        foreach ($sheet->getRowIterator() as $row) {
            $rowIndex = $row->getRowIndex();
            // 不读取第一行 标题
            if ($rowIndex == 1) continue;

            $cellIterator = $row->getCellIterator();
            $row = [];
            foreach ($cellIterator as $cell) $row[] = $cell->getValue();
            $data[] = $row;
        }
    } catch (Exception $exception) {
        $this->error($exception->getMessage());
    }

    if (empty($data)) {
        $this->error('数据为空,无法导入');
    }

    // 在这里 验证数据格式 导入数据业务处理
    $this->success();
}

总结

在fastadmin中上传和导入已经集成,只需要实现导入数据的业务处理。

相关推荐
北京中科新远科技12 分钟前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php
其实防守也摸鱼1 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
可涵不会debug8 小时前
PHP2Shell 爆发一周后:CVE-2026-109618/109619 自查、修复与防护实录
安全·php·云安全·waf·phpshell
一支蜉蝣8 小时前
Day26 XD安全学习笔记--PHP 应用&模版引用&Smarty渲染&MVC 模型&数据联动&RCE 安全
笔记·网络安全·html·php
vipxieliang8 小时前
PHP 中的设计模式:工厂模式与单例
php
vipxieliang9 小时前
ThinkPHP 8.0 注解路由实战:PHP 8 原生 Attribute 方案
php·thinkphp
evoxwht10 小时前
给 CRMEB v8 商品中台加一个「课程」商品类型
php
evoxwht10 小时前
给 CRMEB V8 给 MCP 服务加一个分销工具
php
IT召唤狮1 天前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
科技新资讯1 天前
AI如何批量处理Excel文件? 从数据合并、清洗到自动生成报表,看看 AI Agent 怎么完成任务
大数据·人工智能·excel