thinkphp6入门(23)-- 如何导入excel

1. 安装phpexcel

composer require phpoffice/phpexcel

图片

composer update

2. 前端

<form class="forms-sample" action="../../xxxx/xxxx/do_import_users" method="post" enctype="multipart/form-data"><div class="control-group row"> <label>Excel表格:</label> <input type="file"  name="users_excel"/> </div> <br><button type="submit" class="btn btn-primary mr-2">导入</button>
</form>

图片

3. 后端

use PHPExcel_IOFactory;  //通过composer加载的第三方类,直接在头部引入一下就可以/*** 批量新增用户*/public function do_import_users()
{// users_excel为变量名if(!request()->file('users_excel')){return  $this->error('请上传excel文件');}$path = request()->file('users_excel');//实例化PHPExcel类$PHPExcel = new \PHPExcel();//默认用excel2007读取excel,若格式不对,则用之前的版本进行读取$PHPReader = new \PHPExcel_Reader_Excel2007();if (!$PHPReader->canRead($path)) {$PHPReader = new \PHPExcel_Reader_Excel5();if (!$PHPReader->canRead($path)) {return  $this->error('请上传excel文件');}}//读取Excel文件$PHPExcel = $PHPReader->load($path);//读取excel文件中的第一个工作表$sheet = $PHPExcel->getSheet(0);//取得最大的列号,注意,是列号,不是有多少列,比如Q$allColumn = $sheet->getHighestColumn();//取得最大的行号$allRow = $sheet->getHighestRow();// 第一行是列名,从第二行开始插入for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {//获取B列的值$data = ['number'=>$PHPExcel->getActiveSheet()->getCell("A" . $currentRow)->getValue(),'nickName'=>$PHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue(),'name'=>$PHPExcel->getActiveSheet()->getCell("C" . $currentRow)->getValue(),'tel'=>$PHPExcel->getActiveSheet()->getCell("D" . $currentRow)->getValue(),'money'=>$PHPExcel->getActiveSheet()->getCell("E" . $currentRow)->getValue(),'time'=>self::get_date_by_excel($PHPExcel->getActiveSheet()->getCell("F" . $currentRow)->getValue()),'is_pay'=>$PHPExcel->getActiveSheet()->getCell("G" . $currentRow)->getValue(),'shop_name'=>$PHPExcel->getActiveSheet()->getCell("H" . $currentRow)->getValue(),'remarks'=>$PHPExcel->getActiveSheet()->getCell("I" . $currentRow)->getValue(),'status'=>0,'created_at'=>date('Y-m-d')];// 其它操作,比如插入数据库}}/*** excel里的字符串时间转时间*/public static function get_date_by_excel($date){if (!$date || $date == '0000-00-00') return null;$unix_time = \PHPExcel_Shared_Date::ExcelToPHP($date);return gmdate('Y-m-d H:i',$unix_time);}

注:现在主要使用phpoffice/phpspreadsheet库,phpoffice/phpexcel已经不再维护,但本文由于环境无法更新,所以就安装了phpoffice/phpexcel。基本操作一样。

参考:https://www.tpxhm.com/fdetail/725.html

注:

一、在ubuntu环境下提示 Class 'ZipArchive' not found

 查看对应的php版本

php -v

比如得到的版本是php7.4

那么

sudo apt-get install php7.4-zip

安装之后重启服务

sudo /etc/init.d/apache2 restart

最后通过 php -m | grep zip查看是否安装成功

之前有将在php.ini中将

zlib.output_compression = Off 改为 zlib.output_compression = On

不知道是否有影响

二、如果报错Call to undefined function simplexml_load_string()

 sudo apt-get install php7.4-xml php7.4-xmlrpc
sudo /etc/init.d/apache2 restart

三、如果报错Trying to access array offset on value of type int

请看

Trying to access array offset on value of type int-CSDN博客文章浏览阅读1.1w次,点赞8次,收藏6次。问题描述:出现报错信息 先百度翻译''试图访问int类型值的数组偏移量''通过翻译得知 int型的数据被其他不能使用的类型使用了(个人理解)关于这块 php7.4升级之后会有这个bug 网上大多人是说7.4 版本的向后不兼容更改,非数组的数组样式访问,现在,尝试将 null,bool,int,float 或 resource 类型的值用作数组 ( 例如 $null[“key”] ) 会产生一个通知。解决问题:我这个报错在83行 我先打印查询$pValue查看是什么_trying to access array offset on value of type inthttps://blog.csdn.net/qq5201314wx/article/details/124317321

by: 软件工程小施同学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616485.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cron表达式使用手册

cron表达式 我们在使用定时调度任务的时候&#xff0c;最常用的就是cron表达式。通过cron表达式来指定任务在某个时间点或者周期性执行。 范围&#xff1a; 秒&#xff08;0-59&#xff09;&#xff08;可选&#xff09; 分&#xff08;0-59&#xff09; 时&#xff08;0-…

如何对图像进行聚类

文章来源&#xff1a;https://medium.com/voxel51/how-to-cluster-images-6e09bdff7361 2024 年 4 月 10 日 使用 FiftyOne、Scikit-learn和特征嵌入 在 2024 年深度学习的计算密集型环境中&#xff0c;集群一词最常出现在讨论 GPU 集群时--高度优化的矩阵乘法机器的大规模集…

uniapp开发小程序手写板、签名、签字

可以使用这个插件进行操作 手写板-签名签字-lime-signature - DCloud 插件市场 但是目前这个插件没有vue3 setup Composition API的写法。所以对于此文档提供的可以直接使用,需要使用Composition API方式实现的,可以继续看。 因为Composition API方式,更加的简单、灵活,…

错题记录(2)

来源&#xff1a; FPGA开发/数字IC笔试系列(10) 笔试刷题 笔试 | 海思2022数字IC模拟卷&#xff08;真题模拟&#xff0c;带解析&#xff09; 运算符优先级

Python项目移动文件夹后出现ModuleNotFoundError: No module named

文章目录 0 问题再现1 问题原因2 结局办法2.1 如果是使用编译器运行2.2 如果是在linux环境下&#xff0c;使用命令运行 0 问题再现 移动Python的项目文件夹后&#xff0c;代码出现模块引用未知的问题。 1 问题原因 移动Python项目后&#xff0c;source root&#xff08;项目…

基于YOLOv8的河道漂浮物实时检测系统【训练和系统源码+Pyside6+数据集+包运行】

✨目录 一、系统概述和展示&#x1f384;1.1 摘要 &#x1f388; 二、一站式使用教程&#x1f384;三、YOLOv8原理剖析&#x1f384;3.1 YOLOv8背景和技术原理&#x1f388; 四、模型训练、评估和推理&#x1f384;4.1 数据集介绍&#x1f388;4.2 模型训练&#x1f388;4.3 结…

搭建个人智能家居 4 -WS2812B-RGB灯

搭建个人智能家居 4 - WS2812B-RGB灯 前言说明ESPHomeHomeAssistant 前言 上一篇文章我们已经完成了第一个外设的添加&#xff08;一个LED灯&#xff09;&#xff0c;今天接着来“壮大”这个系统&#xff0c;添加第二个外设“RGB灯”。 环境搭建可以回顾前面的文章。前文回顾&…

OpenCV轻松入门(六)——简单图片处理【马赛克、毛玻璃、浮雕效果】

马赛克效果 马赛克指现行广为使用的一种图像&#xff08;视频&#xff09;处理手段&#xff0c;此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果&#xff0c;因为这种模糊看上去有一个个的小格子组成&#xff0c;便形象的称这种画面为马赛克。其目的通常是使之无法辨…

【vue】跨组件通信--依赖注入

import { provide,inject } from vue provide&#xff1a;将父组件的数据传递给所有子组件&#xff08;子孙都有&#xff09;inject&#xff1a;接收provide 项目文件结构 App.vue是Header.vue的父组件&#xff0c;Header.vue是Nav.vue的父组件 传值过程 App.vue <tem…

从零实现诗词GPT大模型:专栏内容规划

一、前情介绍 本系列文章将从头编写一个类GPT的深度学习模型&#xff0c;并在诗词数据集上进行训练&#xff0c;从而可以进行诗词创作。 本次实现的类GPT模型&#xff0c;可以在kaggle上使用免费GPU进行训练&#xff0c;并可以在自己的电脑上进行推理&#xff0c;整个学习过程…

Visual Studio code无法正常执行Executing task: pnpm run docs:dev

最近尝试调试一个开源的项目&#xff0c;发现cmd可以正常启动&#xff0c;但是在vs中会报错&#xff0c;报错内容如下 Executing task: pnpm run docs:dev pnpm : 无法加载文件 E:\XXXX\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 http…

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程 文章目录 前言一、实验工具1.串口USB线——烧录APP2生成的BIN文件2.STLINK——烧录BOOT代码和APP1代码3.烧录工具——将BIN文件烧录到单片机中4.FLYMCU——清除芯片FLASH 二、硬件绘制1.原理图2.PCB 三、软件配置1.BOOT…