非常简洁的一个 Excel 导出封装,生成多个 Excel 文件并打包成 zip 通过浏览器下载

ops/2025/2/22 20:01:08/

分享链接:https://github.com/xcjiu/php-excel

数据转换成 Excel 导出应用

非常简洁的一个 excel 导出封装,只要查询速度快,一百万数据量几十秒可导出并下载,生成多个 excel 文件并打包成 zip 通过浏览器下载
服务器临时生成的文件和目录会在下载后全部清除
具体使用说明:把 excel 文件放入你的项目扩展目录,请确保 excel 目录有读写权限,并已安装 ZipArchive 压缩扩展,PHP>= 5.2.0

use excel\excel\excelclass\ExcelExport;//初始化并配置文件名,标题,字段值过滤器, 这些方法调用顺序随意
$excelObj = (new ExcelExport())->filename($filename)->title($title)->filter($filter);//你的数据查询
......//生成excel文件
$excelObj->excel($data, $i=1);//打包zip并下载
$excelObj->fileload();
注意:在服务器运行时可能遇到权限问题,所以请提前给好权限
如:默认的读写目录是 ../tmp   则要给tmp目录权限 sudo chown daemon:ubuntu -R tmp , sudo chmod -R 777 tmp
具体方法参数说明
filename($filename)$filename string 为字符串类型,配置这个文件名时不要加具体日期拼接,因为会自动生成 2018_08_08filename 模式的文件名title($title)$title array 为字段名对应标题的键值对数组, 如果标题字段数据中不存在则会忽略,如$title = ['user_id'=>'用户id','username'=>'用户名']filter($filter)$filter array 这个是用来做字段值过滤的,支持时间截转换成 datetime(Y-m-d H:i:s) 或 date(Y-m-d) 格式的输出,如:$filter = ['sex'=>[1=>'男', 0=>'女'], 'login_time'=>'datetime'];
sex 该字段值为数字要转化成不同的中文,字段值会根据过滤器中的配置来显示男或女
login_time 该字段值查询出来是int类型的时间截,配置了 datetime 则会转换成具体时间格式来输出
excel($data, $i=1)$data array 要导出的数据,为一个二唯数组,如果是一唯数组不做处理,因为只有一条数据不需要做文件导出$i int 这个默认值是 1,用来分隔文件用的。如果只有一个文件输出,不需要传此参数,如果是生成多个文件则需要传入该参数,并且每个文件名数字参数都不同fileload() 最后一步,不需要参数,自动打包zip下载并清理临时文件下面是一个demo
<?php
include_once "excelclass/ExcelExport.php";$limit = 10000; //一次查询一万条记录$filename = 'login_log';$title = ['id'=>'ID','user_id'=>'用户id','plat'=>'渠道','username'=>'用户名','sex'=>'性别','ip'=>'用户ip','register_time'=>'注册时间'];$filter = ['register_time'=>'datetime'];$con = mysqli_connect('127.0.0.1','root','pass','dbname') or die('数据库连接不上');$countSql = "select count(*) from user";$count = mysqli_fetch_assoc(mysqli_query($con,$countSql));$total = $count['count(*)'];//这里要注意一点,默认的临时保存文件的目录是 /tmp/ 如果这个目录不存在的话请 ->tmpdir()指定目录,并且保证有读写权限
$excelObj = (new ExcelExport())->tmpdir('/tmpdir/')->filename($filename)->title($title)->filter($filter);for ($i=0; $i < ceil($total/$limit); $i++) { //分段查询, 一次$limit=10000条$offset = $i * $limit;$dataSql = "select * from user limit $limit offset $offset";$result = mysqli_query($con, $dataSql);$data = [];while ($row = mysqli_fetch_assoc($result)) {$data[] = $row;}$res = $excelObj->excel($data, $i+1); //生成多个文件时的文件名后面会标注'($i+1)'
}
mysqli_close($con);
$excelObj->fileload();


http://www.ppmy.cn/ops/160591.html

相关文章

计算机专业知识【深入理解 IP 地址与子网掩码:从 /27 到不同 CIDR 表示】

在计算机网络里&#xff0c;IP 地址和子网掩码是构建网络通信的基石。像 “135.21.128.0/27” 这种表述很常见&#xff0c;其中的 “/27” 以及它与 “1/24”、“8/24” 等不同 CIDR 表示法的差异&#xff0c;可能会让初学者感到困惑。接下来&#xff0c;我们就详细展开说说。 …

pikachu之CSRF防御:给你的请求加上“网络身份证”

CSRF防御&#xff1a;给你的请求加上“网络身份证” 上集回顾 ​在上一章节中&#xff0c;我们化身“遥控黑客”&#xff0c;用GET请求和POST表单把CSRF漏洞玩得风生水起&#xff0c;体验了“隔空改签名”等骚操作。今天&#xff0c;我们将从攻击者变身防御者&#xff0c;揭秘…

2.6学习

misc buu-[GXYCTF2019]佛系青年 得到一个压缩包&#xff0c;需要密码才能解密010查看一下是真加密还是伪加密。看到是伪加密&#xff0c;将90改为00&#xff0c;得到文件 解压后是一个压缩包和一个文本文件&#xff0c;打开文本文件&#xff0c;看到最下方有一段密文&#x…

论文概览 |《Urban Analytics and City Science》2023.10 Vol.50 Issue.8

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2023年10月第50卷第8期的论文的题目和摘要&#xff0c;一共包括21篇SCI论文&#xff01; 论文1 Advances in geospatial approaches to transport networks and sustainable mobility …

Spring统一功能处理:拦截器、响应与异常的统一管理

目录 一.拦截器 二.统一数据返回格式 三.统一异常处理 一.拦截器 拦截器是Spring框架提供的核功能之&#xff0c;主要来拦截的请求&#xff0c;在指定法前后&#xff0c;根据业务需要执预先设定的代码。 也就是说&#xff0c;允许开发员提前预定义些逻辑&#xff0c;在的请…

Vue.prototype 详解及使用

简介&#xff1a; 在 Vue.js 开发中&#xff0c;Vue.prototype 是一个强大的特性&#xff0c;允许开发者向所有 Vue 实例添加全局方法或属性。 一、Vue.prototype 的作用与原理 原型链继承 Vue 实例通过原型链继承 Vue.prototype 上的属性和方法。当在原型上添加属性或方法后…

[文末数据集]ML.NET库学习010:URL是否具有恶意性分类

文章目录 ML.NET库学习010:URL是否具有恶意性分类项目主要目的和原理项目概述主要功能和步骤总结数据集地址ML.NET库学习010:URL是否具有恶意性分类 项目主要目的和原理 项目主要目的: 本项目的目的是通过分析URL的特征,构建一个机器学习模型来判断给定的URL是否具有恶意…

Python实战:Excel中文转拼音工具开发教程

在日常办公中&#xff0c;我们经常需要处理Excel文件&#xff0c;有时候需要将中文转换为拼音缩写以方便检索和使用。今天我将分享一个使用Python开发的小工具&#xff0c;它可以自动将Excel文件中指定列的中文转换为拼音缩写。 C:\pythoncode\new\ConvertExcelcontentToPinyin…