ThinkPHP导入Excel如何快速完成数据导入 零基础教程

冬杰小哥_9393

冬杰小哥_9393

2026-07-10

597人浏览

原创

用phpspreadsheet将excel数据导入数据库需四步:装库并刷新自动加载、安全移动文件后显式创建reader读取、映射列名并清洗数据、分批插入且事务保障。

thinkphp导入excel如何快速完成数据导入 零基础教程

想在ThinkPHP项目里把Excel表格里的数据一键塞进数据库,又不想被报错卡住、不看文档就动手、反复重装库、改命名空间改到怀疑人生——这篇文章只讲你上传完文件后,从第一行代码开始到数据真正落库的完整路径,每一步都踩过坑。

先装对库,别让Class not found拦在第一步

执行这条命令安装phpspreadsheet(不是PHPExcel,它已停止维护):
composer require phpoffice/phpspreadsheet

装完别急着写代码,先刷新自动加载缓存:
composer dump-autoload

【必须做】确认你的ThinkPHP项目已正确引入vendor/autoload.php——TP6默认做了,但如果你手动改过入口文件或用了自定义加载器,这里漏掉就会报“Class not found”。

在控制器顶部写这行引入,一个字都不能少:
use PhpOffice\PhpSpreadsheet\IOFactory;

上传文件后,安全移动再读取

别直接用$_FILES['file']['tmp_name']传给IOFactory::load()——框架可能已清理临时文件,路径失效或权限不足。

第一步:创建可读目录
在runtime/下新建upload/子目录(如runtime/upload/),确保PHP进程有写入权限。

第二步:用move_uploaded_file()转移文件
复制临时文件到runtime/upload/,并生成唯一文件名(例如:date('YmdHis').rand(100,999).'.xlsx')。

第三步:取真实扩展名,硬匹配reader类型
用pathinfo($filePath, PATHINFO_EXTENSION)获取后缀,转大写后映射:
'xlsx' → 'Xlsx','xls' → 'Xls'。

第四步:显式创建Reader,跳过样式节省内存
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(true);

Hotnews Excel
Hotnews Excel

当用户发送热点新闻Excel文件时,自动执行相应操作。触发词:skill, 优化, 数据, data。

下载

逐行读取并过滤空行

方法一:用getRowIterator()遍历(推荐)
调用$worksheet->getRowIterator(),再对每行调用getCellIterator(),设置setIterateOnlyExistingCells(false)保证列数对齐。

方法二:用getHighestRow() + for循环(适合小文件)
先$highestRow = $worksheet->getHighestRow();再for($row = 2; $row

关键过滤逻辑:
每行读完后用array_filter($rowData)判断是否全为空值,【跳过全空行】,否则插入null会触发数据库NOT NULL约束失败。

字段映射与数据清洗

第一步:取第1行作为表头数组
$header = $worksheet->rangeToArray('A1:'.$highestColumn.'1')[0];

第二步:硬编码映射规则(示例)
将Excel中文列名转为数据库字段名:
['用户姓名' => 'user_name', '手机号' => 'mobile', '是否启用' => 'status']

第三步:转换特殊值
遇到“是/否”,转成1/0;日期单元格用$cell->getFormattedValue()或$cell->getCalculatedValue()避免时间戳错乱;文本型数字(如“00123”)用trim() + (string)保留前导零。

第四步:构建插入数据数组
foreach($dataRows as $row) {
  $dbRow = [];
  foreach($header as $i => $colName) {
    $field = $map[$colName] ?? null;
    if($field && isset($row[$i])) {
      $dbRow[$field] = $this->cleanValue($row[$i]);
    }
  }
  $insertData[] = $dbRow;
}

分批插入并开启事务

第一步:开启事务
$db = Db::connect();
$db->startTrans();

第二步:每500条一批插入
用array_chunk($insertData, 500)切块,每块调用Db::name('user')->insertAll($chunk)。

第三步:任一批失败则回滚
if (!$db->execute()) {
  $db->rollback();
  throw new Exception('批量插入中断,已回滚');
}

第四步:全部成功后提交
$db->commit();

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

thinkphp excel php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

11104

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6441

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2155

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4088

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4794

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3751

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5397

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4222

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12142

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程