当前位置: 首页 > news >正文

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

分享链接: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();

相关文章:

  • python小项目编程-中级(1、图像处理)
  • 【蓝桥杯集训·每日一题2025】 AcWing 6118. 蛋糕游戏 python
  • 欧洲跨境组网专线:企业出海的高效网络解决方案
  • Python(二十二)实现各大跨境船公司物流查询CMA船司物流查询
  • DeepSeek技术演进史:从MoE到当前架构
  • npm/pnpm软链接
  • Spring中Aware的用法以及实现
  • hive—常用的函数整理
  • AI学习指南DeepSeek篇(6)-DeepSeek论文介绍
  • 目标检测中单阶段检测模型与双阶段检测模型详细对比与说明
  • Python 3 中 快速排序 和 归并排序
  • matlab和java混合编程经验分享
  • 迅为RK3568开发板篇Openharmony配置HDF控制UART-实操-HDF驱动配置UART-修改HCS配置
  • Python logger模块
  • 路由器的WAN口和LAN口有什么区别?
  • 1.14作业
  • 动态存储斐波那契数列(递归优化)
  • 基于AVue的二次封装:快速构建后台管理系统的CRUD方案
  • synchronized锁字符串
  • 语音直播交友app出海:语音直播交友系统软件源码搭建国际化发展技术层面分析
  • 一个完整的网站制作流程/网络推广的基本方法有哪些
  • 济南做兼职网站/百度百科推广费用
  • app和网站开发/谷歌海外推广
  • 网站没有做301定向/西安百度快速排名提升
  • 深圳企业网站建设专业/万网官网域名注册
  • 甘德县wap网站建设公司/宁波网站推广哪家公司好