php导出excel 下载,excel的导出和下载(实例讲解)

2023-11-11

1、前言

有时需要将数据库表资源导出excel,做成一些报表数据。

而php导出excel的方法大致有几种:

1. 使用php的类库,进行导出,如PHPExcel

2.使用php原生的方法进行导出

而本文介绍的就是,如何通过原生方法导出excel

2、关键函数

2.1、ob输出

•ob_start();

•ob_get_contents

•ob_end_clean

•fopen

•fwrite

•fclose

•iconv

2.2、header输出

1.header

2.iconv

3、使用ob函数进行excel到导出

ob函数主要分为三步:

1.进行缓存的设置

2.读取缓存

3.写入文件

下面贴上导出的excel类

class Excel

{

// ob函数缓存的开始

public static function start ()

{

ob_start();

}

// 获取缓存内容

public static function save ($path)

{

$data = ob_get_contents();

ob_end_clean();

self::writeToExcel($path, $data);

}

//写到文件

private static function writeToExcel ($fn, $data)

{

$dir = self::setDir();

$fp = fopen($dir . '/'. $fn, 'wb');

fwrite($fp, $data);

fclose($fp);

}

//excel默认是GKB,所有要转码

public static function setChar ($value, $inchar = 'utf-8', $outchar ='gbk')

{

return iconv($inchar, $outchar, $value);//转化编码

}

//创建目录,linux系统一般要写到文件,目录需要w谦虚,而文件需要x权限,为了省事直接建立子文件夹,可以不需要修改谦虚

public static function setDir($dirName = 'excel')

{

if(!is_dir($dirName)) {

mkdir($dirName);

}

return $dirName;

}

}

4、完整页面代码

header('Content-Type: text/html; charset=GBK'); //excel需要GBK编码,为了防止转码产生的乱码,需要设置成GBK

require 'coon.php';

require 'excel.class.php';

$sql = 'select * from user';

$res = $link->query($sql);

//判断是否有发送get数据

if(isset($_GET['id'])){

$name = empty($_GET['id']) ? 'a' . rand(1000,9999) : $_GET['id'] ;

$filename = $name . '.xls';

//设置缓存的开始

Excel::start();

}

?>

//页面输出一般是不需要转码的,excel输出才需要转码

echo '

echo '';

//设置thead输出

echo '

' . Excel::setChar('编号') . '';

echo '

' . Excel::setChar('用户名') . '';

echo '

' . Excel::setChar('密码') . '';

echo '

';

?>

echo '

';

//设置tbody输出

while($re = $res->fetch(PDO::FETCH_ASSOC)){

echo '

';

echo '

' . Excel::setChar($re['id']) . '';

echo '

' . Excel::setChar($re['user']) . '';

echo '

' . Excel::setChar($re['pwd']) . '';

echo '

';

}

echo '

';

?>

if(isset($_GET['id'])){

//保存文件

Excel::save($filename);

}

if(isset($_GET['id'])){

echo '' .Excel::setChar('完成') .'';

}else{

echo '' . Excel::setChar('导出') .'';

}

?>

5、使用header下载excel

使用ob函数导出excel只能保存到服务器,不能提供下载(特殊处理下还是可以的);下面介绍使用header()函数来导出并下载excel

主要两个header()函数

header("Content-type:application/vnd.ms-excel");//指定文件类型

header("Content-Disposition:filename=a.xls" ); //指定下载文件名

其他做法和ob函数的导出相同(下面完整代码)

//下载主要靠这两个

header("Content-type:application/vnd.ms-excel");//指定文件类型

header("Content-Disposition:filename=a.xls" ); //指定下载文件名

require 'coon.php';

require 'excel.class.php';

$sql = 'select * from user';

$res = $link->query($sql);

?>

//页面输出一般是不需要转码的,excel输出才需要转码

echo '

echo '';

//设置thead输出

echo '

' . Excel::setChar('编号') . '';

echo '

' . Excel::setChar('用户名') . '';

echo '

' . Excel::setChar('密码') . '';

echo '

';

?>

echo '

';

//设置tbody输出

while($re = $res->fetch(PDO::FETCH_ASSOC)){

echo '

';

echo '

' . Excel::setChar($re['id']) . '';

echo '

' . Excel::setChar($re['user']) . '';

echo '

' . Excel::setChar($re['pwd']) . '';

echo '

';

}

echo '

';

?>

6、结语

这里只简单介绍了excel的导出和下载,一个是使用ob()函数,一个是使用header()函数,两种方法大同小异,但都需要注意的是excel需要GBK编码,需要使用iconv函数进行转码,才能保证不出现乱码。

本文只简单了介绍,更多高深的方法需要由你自己去探索。

以上这篇excel的导出和下载(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php导出excel 下载,excel的导出和下载(实例讲解) 的相关文章

  • Github隐藏功能显示自己的README,个人化你的Github主页

    创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地址 魔法工具 人工智能福利文章 分享几个国内免费可用的ChatGPT镜像 10几个类ChatGPT国内AI大模型 用 文心一言 1分钟写
  • Chrome OS 将实现在虚拟机上运行 Linux 应用程序

    Chromebook 用户很快就可以通过更简单的方式在 Google Chrome OS 硬件上运行 Linux 发行版和应用程序 据外媒 Chrome Unboxed 报道 Chromium Gerrit 上有一个新合并的提交 描述了 在
  • vulnhub-KIOPTRIX: LEVEL 1.2 (#3)-KioptrixVM3靶场

    以下演示均在测试环境进行 遵守法律 维护网络安全 靶场链接 Kioptrix Level 1 2 3 VulnHub 靶场为单层网络 下载解压之后 直接设置网络为nat模式 kali攻击机同样设置为nat 保持两者在同一个网段即可 本次没有
  • 将YOLOV5数据集不同类别分开的Python脚本

    将YOLOV5数据集不同类别分开的Python脚本 import os import shutil labelall path r C Users 1 Desktop test labels all 所有标签存放的路径 imgall pat
  • 3种等待方式,让你学会Selenium设置自动化等待测试脚本!

    一 Selenium脚本为什么要设置等待方式 即他的应用背景到底是什么 应用Selenium时 浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作 需设置一定的等待时间去等待元素的出现 简单来说 就是设置一个等待时间让页面元素加
  • JUC并发编程之ReentrantLock

    1 非公平锁实现原理 加锁解锁流程 构造器默认实现的是非公平锁 public ReentrantLock sync new NonfairSync NonfairSync 继承 Sync Sync 继承 AbstractQueuedSync
  • 从 0 开始学 Python 自动化测试开发(二):环境搭建

    本文是 从 0 开始学 Python 自动化测试开发 专题系列文章第二篇 环境搭建篇 适合零基础入门的同学 没有阅读过上一篇的同学 请戳蓝色字体阅读 作者方程老师 是前某跨国通信公司高级测试经理 目前为某互联网名企资深测试技术专家 也是霍格
  • Win11家庭版完美解决旧版exe的DPI显示高清修复

    由于Win11家庭版的一些限制 不能直接按Win R搜索打开gpedit msc来执行相关操作 修改注册表对普通用户又太危险 因此本文介绍了一种更简便的操作方法 来设置旧程序对现在电脑的高DPI的适配 一共12个步骤 步骤1 打开 开始 搜
  • flutter 超详细的sqflite数据库使用详解

    前言 数据持久化存储是app开发过程中比较常见的需求 对于简单的配置数据我们可以通过SharedPreference来实现 但是如果是类似用户列表 商品列表等的大量复杂数据 再使用SharedPreference来存储就不合适了 本篇我们就
  • curl命令多行执行

    window环境执行 分割符是 curl http surge jdfmgt com core r coreAutoInitiateMain testAddData X POST d objectCreateCount 1 typeCode
  • leecode151 反转字符串中的单词(附有手写思路)

    丑陋的思路 StringJoiner版本 前言 刚开始我是用StringJoiner写的 因为我看到这个每个元素之间有一个固定的空格我就想着能够直接用这个StringJoiner来进行书写 但是我提交的时候说这个StringJoiner无法
  • leetcode分类刷题:哈希表(Hash Table)(三、循环存在问题)

    1 当需要快速判断某元素是否出现在序列中时 就要用到哈希表了 2 本文针对的总结题型为给定的序列或需要构造的序列中是否存在循环 与 160 相交链表 141 环形链表 142 环形链表 II的题型一样 202 快乐数 这道题还考察如何对正整
  • AndroidStudio内各个模拟器的安装位置

    As中 下载的本地模拟器的位置位于 android avd目录下 当该目录被删除后 打开AndroidStudio的AVD 会发现所有的下载过的模拟器都没有了
  • 【2021-04-07华为机试】第二题:各任务执行完毕需要的时间

    题目 给定N个任务 1 lt N lt 100 任务编号从0开始顺序累加 这N个任务在系统中排队顺序执行 每个任务的自身执行时间为非负整数 依次为t1 t2 tn 部分任务之间存在依赖关系的 某任务所依赖的任务如果没有执行 则该任务需要重回
  • IDEA 中设置自动补全方法

    最近转用 IDEA 但习惯于 Eclipse 的快捷键和快捷输入 以下是在 IDEA 中增添快捷键和快捷输入的方法 1 File Settings 2 Editor Live Templates Add Template Group gt
  • Ant Design Pro新增页面步骤

    新增页面步骤 根据页面结构规范创建页面文件后 接着在项目根目录寻找config文件夹下的routes js中添加该页面项的路由配置 如创建子路由则在父路由下定义routes属性 值为一个数组 数组中为该路由的子路由路由配置项 如下图 exp
  • 微信隐藏功能系列3:微信关闭朋友圈广告推送

    我们使用微信好多年了 这个工具不仅仅在社交上为我们带来许多好处 工作 消费中也是给我们带来不少方便之处 大家对微信隐藏功能了解多少 本期分享 微信关闭朋友圈广告推送 虽然微信为我们带来许多方便 但令人不适的东西也是有的 广告就是其中之一 特
  • python如何创建二维数组

    关于python中的二维数组 主要有list和numpy array两种 好吧 其实还有matrices 但它必须是2维的 而numpy arrays ndarrays 可以是多维的 两者可以相互转化 下边是两者区别 数组list gt g
  • linux va_start 编译,如何把unix 下的c程序移植到suse linux下,编译出错?

    FILE gfp out stdout 第45行 报 err c 45 error initializer element is not constant include int err set info char ps error typ

随机推荐

  • c++:STL容器及其接口(string、vector、deque、stack、queue、list、set/multiset、map/multimap)

    STL Standard Template Library 标准模板库 目录 一 STL 六大组件简介 二 string容器 2 1 string容器基本概念 2 2 string 构造函数 2 3 string基本赋值操作 2 4 str
  • 第五章可视化

    1散点图 1 代码 A 未处理异常值 import ggplot as gp import pandas as pd import numpy as np crime pd read csv crimeRatesByState2005 cs
  • git交互式暂存 git add -i 这个骚操作存在的意义为何

    文章目录 启用交互暂存 暂存常用的命令 交互暂存的意义在哪 应该场景的进一步说明 你已经能非常熟练的使用 git了 暂存是其中最基本的操作了 交互暂存是暂存的高级用法 虽然可以不用 但是在某些特定场景下 可以提高我们的工作效率 下边请看详细
  • Opencv3.1+python2.7的CentOS7安装

    time Jan 13 2016 20 29 author duanxxnj 163 com 花了两天时间才把Openv3 1的Python安装完成 中间遇到了好多奇怪的错误 在这里记录下整个安装过程 系统环境 Duanxx CentOS
  • js debugger的两种方式

    第一种 在js代码中加上debugger class ReactiveEffect constructor fn scheduler this fn fn this scheduler scheduler this active true
  • HDU - 6126 Give out candies

    Give out candies 题解 第一次遇见这样处理的网络流模型 将问题转换成最小割问题 具体的题解参考自 传送门 先将每个人的拆成m个人 然后s向第1人连边流量为inf 第i个人向第i 1个人连边 流量为 3000 w 将t视为每组
  • 自用IdeaVim配置

    具体配置如下 nnoremap
  • STL之set集合容器

    set集合容器实现了红黑树 Red Black Tree 的平衡二叉检索树的的数据结构 在插入元素时 它会自动调整二叉树的排列 把该元素放到适当的位置 以确保每个子树根节点的键值大于左子树所有节点的键值 而小于右子树所有节点的键值 另外 还
  • 校门外的树C语言详解

    题目描述 某校大门外长度为 l 的马路上有一排树 每两棵相邻的树之间的间隔都是 1 米 我们可以把马路看成一个数轴 马路的一端在数轴 0 的位置 另一端在 l 的位置 数轴上的每个整数点 即 0 1 2 l 都种有一棵树 由于马路上有一些区
  • 自动化办公:4、 Python操作PDF

    1 相关介绍 PyPDF2 读取 写入 分割 合并PDF文件 pdfplumber 读取 PDF 文件中内容和提取 PDF 中的表格 pip install PyPDF2 pip install pdfplumber 2 批量拆分 将一个完
  • 2017“编程之美”终章:AI之战勇者为王

    编者按 8月15日 第六届微软 编程之美 挑战赛在选手的火热比拼中圆满落下帷幕 编程之美 挑战赛是由微软主办 面向高校学生开展的大型编程比赛 自2012年起 微软每年都在革新比赛命题 紧跟时代潮流 如今的 编程之美 挑战赛已成为优秀学子切磋
  • 火爆科研圈的三维重建技术:Neural radiance fields (NeRF)

    如果说最近两年最火的三维重建技术是什么 相信NeRF 1 是一个绝对绕不过去的名字 这项强到逆天的技术 一经提出 就被众多研究者所重视 对该技术进行深入研究并提出改进已经成为一个热点 仅仅过了不到两年的时间 NeRF及其变种已经成为重建领域
  • 【golang基础】校验和计算

    首先 IP ICMP UDP和TCP报文头都有检验和字段 大小都是16bit 算法基本上也是一样的 在发送数据时 为了计算数据包的检验和 应该按如下步骤 1 把校验和字段设置为0 2 把需要校验的数据看成以16位为单位的数子组成 依次进行二
  • UE4 读取Json

    UE4 读取Json 添加模块 Json JsonUtilities PublicDependencyModuleNames AddRange new string Core CoreUObject Engine InputCore Jso
  • YOLOv5另一种好用的数据集存放格式(附划分代码及查看每个类别分布情况)

    一 以前用的数据集格式 训练集 测试集的图片和标签分别放在对应的文件夹里 这就导致一个问题 如果相对数据集多次随机划分的话 就要多次从总的图片和标签中选择出需要的图片和标签 并且保存到相应的文件夹中 这样会很麻烦 而且浪费时间 二 改进 将
  • 此URL不支持Http方法GET解决方案

    一 问题 问题代码如下 WebServlet demo3 public class ServletDemo3 extends HttpServlet Override protected void doGet HttpServletRequ
  • insert()方法

    insert 方法 描述 列表 insert 方法将指定对象插入到列表中的指定位置 语法 insert 方法语法 L insert index obj 参数 index 对象obj需要插入的索引值 obj 要插入列表中的对象 返回值 该方法
  • 将Minio获取到的图片直接在页面上预览

    在Minio中获取的文件返回的是二进制流 要想在浏览器页面直接预览就得把获取的二进制流 InputStream 转换成文件流 FileInputStream 具体实现代码如下 public byte getImage PathVariabl
  • 大意了~checksum 到的低级问题

    发送的数据需要在尾端做累加取反 但没有留意到最后一个字节 累加取反值 不用参与累加 因此累加值总是不对 浪费了好多时间
  • php导出excel 下载,excel的导出和下载(实例讲解)

    1 前言 有时需要将数据库表资源导出excel 做成一些报表数据 而php导出excel的方法大致有几种 1 使用php的类库 进行导出 如PHPExcel 2 使用php原生的方法进行导出 而本文介绍的就是 如何通过原生方法导出excel