ThinkPHP番外篇:导出数据到excel文件中

thinkphp6快速导出百万级数据到CSV或者EXCEL文件 很多时候,因为数据统计,我们需要将数据库的数据导出到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易;但是如果对于大数集的导出,将要考虑各种性能的问题,这里以导出数据库一百万条数据为例,导出时间不过20秒,值的学习的一种大数据导出方式。 阅读详情

前言

客户要求将数据导入到excel文件中,百度到的办法往往是使用PHPExcel组件,然而自打thinkphp5.1以后,这个框架就把vendor()这个函数给删掉了,导致网上一票教程都成了过时的东西,不具有参考价值

解决办法:

方法也很简单,不在使用传统的vendor引入,而是使用composer包管理的方式,下面介绍详细步骤:

1、composer引入

在项目所在目录打开命令行,输入如下指令,引入phpoffice/phpexcel包

https://blog.youkuaiyun.com/typedef_struct

在控制器中引入命名空间

use \PhpOffice\PhpSpreadsheet\Spreadsheet;
use \PhpOffice\PhpSpreadsheet\IOFactory;

2、代码实现

这里是导出了一个users用户表,表结构如下

DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `school` varchar(50) DEFAULT NULL,
  `class` varchar(50) DEFAULT NULL,
  `stu_num` varchar(50) DEFAULT NULL,
  `tel` int(12) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `role` varchar(10) DEFAULT NULL,
  `addate` int(15) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

--
-- 转存表中的数据 `users`
--

INSERT INTO `users` (`id`, `username`, `school`, `class`, `stu_num`, `tel`, `password`, `role`, `addate`) VALUES
(1, '小明', '现代', '一年级', '10001', 11111, '11111', 'stu', 1592806424),
(2, '小刚', '现代', '一年级', '10002', 22222, '11111', 'stu', 1592806449),
(3, '小红', '现代', '一年级', '10003', 33333, '11111', 'stu', 1592806469),
(4, '小王', '现代', '二年级', '10004', 44444, '11111', 'stu', 1592806480),
(5, '李白', '唐', '二年级', '10005', 55555, '11111', 'stu', 1592806489),
(6, '杜甫', '唐', '二年级', '10006', 66666, '11111', 'stu', 1592806500),
(7, '白居易', '唐', '二年级', '10007', 77777, '11111', 'stu', 1592806509),
(8, '王安石', '宋', '三年级', '10008', 88888, '11111', 'stu', 1592806520),
(9, '张飞', '三国', '三年级', '10009', 99999, '11111', 'stu', 1592806528),
(10, '关羽', '三国', '三年级', '10010', 1010101010, '1234567', 'stu', 1592806541),
(11, '黄盖', '三国', '四年级', '10011', 1111111111, '11111', 'stu', 1592806555),
(12, '诸葛亮', '三国', '四年级', '10012', 1212121212, '11111', 'stu', 1592806569);
COMMIT;

导出代码:

class Excel extends Controller
{
    //模板下载
    public function download()
    {
        $datas = users::select();
        $spreadsheet = new Spreadsheet();
        $worksheet = $spreadsheet->getActiveSheet();

        $worksheet->setTitle('导入模板');  //设置当前sheet的标题
        $worksheet->getStyle('A1:E1')->getFont()->setBold(true)->setName('Arial')->setSize(10);
        $worksheet->getStyle('B1')->getFont()->setBold(true);
        $worksheet->getDefaultColumnDimension()->setWidth(30);

        //设置第一栏的标题
        $worksheet->setCellValue('A1', '姓名');
        $worksheet->setCellValue('B1', '学院');
        $worksheet->setCellValue('C1', '年级');
        $worksheet->setCellValue('D1', '学号');
        $worksheet->setCellValue('E1', '电话/账号');
        $worksheet->setCellValue('F1', '注册时间');

        //默认填充数据


        //第二行起
        $baseRow = 2; //数据从N-1行开始往下输出 这里是避免头信息被覆盖
        foreach ($datas as $k => $val) {
            $i = $k + $baseRow;
            $worksheet->setCellValue('A' . $i, $val['username']);
            $worksheet->setCellValue('B' . $i, $val['school']);
            $worksheet->setCellValue('C' . $i, $val['class']);
            $worksheet->setCellValue('D' . $i, $val['stu_num']);
            $worksheet->setCellValue('E' . $i, $val['tel']);
            $worksheet->setCellValue('F' . $i, date('Y-m-d H:i:s', $val['addate']));
        }

        //处理 数字过大会进行科学计数法
        $worksheet->getStyle('A2')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
        $worksheet->getStyle('C2')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);


        $this->downloadExcel($spreadsheet, '批量导出用户表', 'Xls');


    }


    /*********************************************************************************************************************/

    //公共文件,用来传入xls并下载
    private function downloadExcel($spreadsheet, $filename, $format)
    {
        // $format只能为 Xlsx 或 Xls
        if ($format == 'Xlsx') {
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        } elseif ($format == 'Xls') {
            header('Content-Type: application/vnd.ms-excel');
        }

        header("Content-Disposition: attachment;filename="
            . $filename . date('Y-m-d') . '.' . strtolower($format));
        header('Cache-Control: max-age=0');
        $objWriter = IOFactory::createWriter($spreadsheet, $format);

        $objWriter->save('php://output');

        //通过php保存在本地的时候需要用到
        //$objWriter->save($dir.'/demo.xlsx');

        //以下为需要用到IE时候设置
        // If you're serving to IE 9, then the following may be needed
        //header('Cache-Control: max-age=1');
        // If you're serving to IE over SSL, then the following may be needed
        //header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        //header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
        //header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        //header('Pragma: public'); // HTTP/1.0
        exit;
    }
}
thinkphp5.1 Excel导入导出 thinkphp5.1版本取消`Loader::import`方法以及`import`和`vendor`助手函数,推荐全面采用命名空间方式的类以及自动加载机制,如果必须使用请直接改为php内置的`include`或者`require`语法。public function upload() { // 获取表单上传文件 $ file = request() - > file ('excel... 阅读详情

相关推荐

thinkPHP3.2 Excel的导入和导出以及Word的导出

最近处理数据的时候,用到了Excel文件导入导出数据库,导出word形式的数据的操作,经过一番努力,理清了整个过程,将收获的东西写在这里Excel导入数据库 程序员直接操作数据库导入数据 写项目的时候,如果要测试大量的数据,通过向数据库一条一条添加数据显然是不合适的,这时候就要大批导入数据了,直接上图片演示过程 来源:Excel导入到phpmyadmin

doubibobo的博客 4006

ThinkPHP自定义Excel导出、导入

2.实例化封装类,调用相关方法,单个设置-示例如下,数字代表的行数或列数,具体看详细代码。1.实例化Spreadsheet,如未安装需要先进行安装。3.自定义字体颜色、大小、字体、自动换行、加粗。五、核心代码(即ExcelLogic类)7.自定义sheet数量及相关内容。3.请根据应用场景进行功能设定。5.自定义单元格字体对齐方式。3.批量设置示例代码如下。六、以文件流形式返回接口。1.自定义sheet名。2.自定义单元格背景色。4.自定义单元格宽、高。6.自定义单元格合并。

小林的博客 1786

ThinkPHP6 的Excel导入与导出

Excel导入导出功能我们经常用到,下面记录自己的实现方法。Helper类PHPExcelHelper 可以直接拿过来使用。在控制器中实现数据组装,model中实现数据验证,最后导入或导出。 helper类中导出导入的写法 namespace app\common\helper; use app\common\constant\SystemConstant; use PHPExcel; trait PHPExcelHelper { /** * excel表格导出 * @par

Mr_Moka的博客 4705

ThinkPHP6 excel 导出功能完整实现

在 ThinkPHP 6.0 中实现 excel 导入导出功能,需要使用第三方库或扩展,例如 phpspreadsheet。

json_li的博客 2804

ThinkPHP3.2 数据导出为Excel

背景:将数据导出为Excel表 控制器代码: public function excel(){ $xlsName = "答题记录表"; $xlsCell = array( array('stitle','题干'), array('nickname','微信名称'), array('str_q','答题内容'), array('uptime','答题时间'), .

Dove言和 577

php 批量导出excel实例

php excel批量导出

ThinkPHP导出Excel文件

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34026276的博客 110

在摩尔线程 MTT S80 上使用 Ollama 进行 DeepSeek R1 蒸馏版模型推理

本文主要介绍了如何在摩尔线程 MTT S80 上通过 Ollama 快速完成DeepSeek R1 蒸馏系列模型的推理。

摩尔线程blog中心 3596

thinkphp导出excel

php excel

u012230371的博客 373

【fNIRS可视化学习1】基于NIRS-SPM进行光极可视化并计算通道坐标

设头皮上的目标点为P₀(x₀, y₀, z₀),需要在大脑皮层点集S上找到最合适的投影点P'。

Rose9614的博客 2208

[Ethernet in CANoe]4--CANoe工程中SOME/IP报文的详细介绍(二)

介绍了SOME/IP报文的SD报文(ServiceDiscovery),本片文章开始继续介绍SOME/IP报文。

汽车ECU自动化测试 1112

ThinkPHP6 excel文件导出 导入

第一步:安装excel composer.json加入一下代码,然后conposer update安装 "phpoffice/phpexcel": "^1.8" 安装之后的目录 第二步 写导出 导入代码 <?php namespace app\admin\controller; use app\BaseController; class Index extends BaseController { public function index...

灰灰的博客 3113

离线反激转换器反馈环路设计:从理论到实践的Type II补偿器详解

在开关电源设计中,反馈环路稳定性是决定电源性能与可靠性的核心。其本质是通过补偿网络对功率级的小信号特性进行校正,以构建一个具有足够相位裕度和增益裕度的闭环系统。反激转换器作为一种广泛应用的隔离拓扑,其功率级在连续导通模式(CCM)和非连续导通模式(DCM)下呈现不同的零极点特性,这直接决定了补偿器的选型。Type II补偿器因其传递函数中固有的积分环节、低频零点与高频极点,恰好能与反激功率级的1P2Z(一个极点、两个零点)特性形成互补,有效塑造理想的回路增益曲线,实现快速稳定的动态响应。本文聚焦于采用TL4

weixin_30162121的博客 501

ThinkPHP 使用 PhpSpreadsheet 导出 Excel 文件

1、安装 PhpSpreadsheet composer require phpoffice/phpspreadsheet 2、控制器代码 public function exportExcel() { // 查询要导出的数据 $data = Db::name('student')->select(); // 实例化 $spreadsheet = new Spreadsheet(); // 获取活动工作薄 $sheet = $spreadsheet-&

相逢不晚的博客 1467

基于MediaPipe的智能俯卧撑计数与姿势矫正系统

在现代健身和体能训练中,俯卧撑是最基础也是最有效的自重训练动作之一。然而,许多人在进行俯卧撑训练时常常存在姿势不正确、计数不准确等问题。本文将介绍如何利用计算机视觉和姿态估计技术,开发一个智能的俯卧撑计数与姿势矫正系统。

qq_36224726的博客 916

XCP_Basic 移植步骤

XCP_Basic 移植步骤

ggzzc的博客 2315

ThinkPHP+Excel 数据导出

根据项目需求,数据库里的数据可以按照搜索条件导出为excel文件。  第一步:在thinkPHP3.2.3框架中引入PHPExcel组件,,一个控制器文件和一个视图文件,PHPExcel和PHPExcel.class.php放入thinkphp的Library/Org/Util/目录下。 如图:     第二步:在控制器中调用excel数据导出的方法 public fu

qq_21987433的博客 490

【项目实战】DevOps制品管理之JFrog Artifactory介绍

JFrog Artifactory是一款领先的二进制软件制品仓库管理工具,由JFrog公司开发。

奶爸的编程之路,也就一周冷个三天 1352

think php 导出excel,使用thinkphp导出excel文件

在https://github.com/PHPOffice/PHPExcel下载最新PHPExcel放到tp框架的核心目录ThinkPHP里面的Vendor下。测试例子:publicfunctiontest(){$xlsName="用户";//注意数组第一个字段必须是小写数组第二个(列标题)根据你的情况填写$xlsCell=array(array('字段1','账号序列'),a...

weixin_29083373的博客 619

uniapp - 解决在线预览PDF文件空白打不开的问题,无论是后端下载二进制文件流pdf还是本地插件或JS预览查看打开白屏不显示,详细排查解决(适用于移动端H5网页、安卓/苹果app、微信小程序)

uniapp App端 实现pdf文件预览打开白屏解决,uniapp 在线预览pdf打开一片空白,跨域白屏,uni-app中使用WebView预览PDF文件打开空白,微信小程序(uniapp)预览PDF空白怎么办,下载PDF文件流后打开空白或无法打开的问题,Uniapp H5网页下载二进制pdf文件页面空白以及解决文件损坏打不开的情况,Uniapp app在线预览pdf文件流,PDF加载出来怎么办,服务器后端返回PDF文件流后前端进行下载但打开后一片白屏,解决pdf文件流,预览全是空白页,pdf文件流,下载

🏆 前端领域优质创作者 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ThinkPHP8 导出Excel数据表格

Think PHP8.0、PHP8.0,并非低版不能用,仅因本人当前版本如此。Excel有默认的表格样式,如需修改,根据实际应用场景进行设置即可。部分参数需自行进行修改,具体查看执行代码.1.安装Spreadsheet。4.调用封装类,导出数据。2.Excel核心控制器。

小林的博客 1704

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ThinkPHP5.0之数据导出excel表格

ThinkPHP5.0之数据导出excel表格 使用composer安装phpexcel扩展类库 composer require phpoffice/phpexcel 控制器类中导入扩展类 use PHPExcel_IOFactory; use PHPExcel; 控制器中方法 /** * 显示列表 * * @return \think\Re...

weixin_42526674的博客 1775

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

thinkphp excel导出

给大家复习下关键thinkphp excel导出的方法,首先第一步先直接去下载个PHPEXCEL包吧,然后就根据以下方法去掉调用下,具体如何引用每个框架引用不一样,按框架去引用。下面方法是公用的 $fileName 是文件名如$fileName=‘test’ $headArr是个数组如$headArr=array(头一,头二,头三) $data 是个数组 如 ...

qq_30089923的博客 220

ThinkPHP5使用PHPExcel导出excel数据表(显示图片,附带解析)

3.把classes文件夹改名为PHPExcel放入项目的vendor目录下(PHPExcel类库就扩展完成了)例如:$objPHPExcel = new \PHPExcel();2.下载完后解压目录如下(classes文件夹是我们所需要的)使用vendor导入的对象实例化需要加"\"4.然后需要的时候使用vendor进行导入。

m0_61814817的博客 5506

ThinkPHP使用phpExcel实现Excel数据的导入导出

很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人研究phpExcel的使用例程总结出来的使用方法,接下来直接进入正题。 首先先说一下,本人的这段例程是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用

manito_y的专栏 921

ThinkPHP导出excel

ThinkPHP导出excel function export_to($data,$name=false,$type = 0){ if(!$name){$name=date("Y-m-d-H-i-s",time());} $PHPExcel = new PHPExcel(); //实例化PHPExcel类,类似于在桌面上新建一个Excel表格 $PHPExcel->g...

Virus 206
上一篇: 六、ThinkPHP模型操作
下一篇: 使用phpqrcode库生成二维码
10086love10010
博客等级 码龄10年 0粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值