当前位置:首页 > PHP编程文章 > PHP中excel的导出和下载(实例讲解)

PHP中excel的导出和下载实例代码

  • 发布时间:
  • 作者:码农之家原创
  • 点击:171

这篇文章主要知识点是关于excel导出下载、php原生导出excel文件的两种方法(推荐) 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下相关资源

PHP、MySQL与JavaScript学习手册

本书有借助面向对象的编程基础,深入学习PHP。研究MySQL,从数据库结构到复杂查询。掌握JavaScript语言,以及带有jQuery的增强功能。调用Ajax进行后台浏览器/服务器通信等,欢迎免费下载

查看详情

PHP中excel的导出和下载(实例讲解)

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类

<?php
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、完整页面代码

<?php
 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();
 }
?>
<?php
 //页面输出一般是不需要转码的,excel输出才需要转码
 echo '<table width=500 height=25 border=0 align=center cellpadding=0 cellspacing=0>';
 echo '<thead><tr>';
 //设置thead输出
 echo '<td >' . Excel::setChar('编号') . '</td>';
 echo '<td >' . Excel::setChar('用户名') . '</td>';
 echo '<td >' . Excel::setChar('密码') . '</td>';
 echo '</thead></tr>';
?>
<?php
 echo '<tbody>';
 //设置tbody输出
 while($re = $res->fetch(PDO::FETCH_ASSOC)){
  echo '<tr>';
  echo '<td >' . Excel::setChar($re['id']) . '</td>';
  echo '<td >' . Excel::setChar($re['user']) . '</td>';
  echo '<td >' . Excel::setChar($re['pwd']) . '</td>';
  echo '</tr>';
 }
 echo '</tbody></table>';
?>
<?php
if(isset($_GET['id'])){
 //保存文件
 Excel::save($filename);
}
if(isset($_GET['id'])){
 echo '<a href="obexcel.php" rel="external nofollow" >' .Excel::setChar('完成') .'</a>';
}else{
 echo '<a href="obexcel.php?id" rel="external nofollow" >' . Excel::setChar('导出') .'</a>';
 
}
?>

5、使用header下载excel

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

主要两个header()函数

header("Content-type:application/vnd.ms-excel");//指定文件类型 
header("Content-Disposition:filename=a.xls" ); //指定下载文件名

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

<?php

//下载主要靠这两个
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);
?>

<?php
 //页面输出一般是不需要转码的,excel输出才需要转码
 echo '<table width=500 height=25 border=0 align=center cellpadding=0 cellspacing=0>';
 echo '<thead><tr>';
 //设置thead输出
 echo '<td >' . Excel::setChar('编号') . '</td>';
 echo '<td >' . Excel::setChar('用户名') . '</td>';
 echo '<td >' . Excel::setChar('密码') . '</td>';
 echo '</thead></tr>';
?>

<?php
 echo '<tbody>';
 //设置tbody输出
 while($re = $res->fetch(PDO::FETCH_ASSOC)){
  echo '<tr>';
  echo '<td >' . Excel::setChar($re['id']) . '</td>';
  echo '<td >' . Excel::setChar($re['user']) . '</td>';
  echo '<td >' . Excel::setChar($re['pwd']) . '</td>';
  echo '</tr>';
 }
 echo '</tbody></table>';
?>

6、结语

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

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

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

php原生导出excel文件的两种方法(推荐)

第一种方法:

$filename='文件名称';
  $filetitle='你的标题';
  if($_POST){
    set_time_limit(10000);
    $title = '';
    ini_set('memory_limit','300M');
    header('Content-Type: application/vnd.ms-excel;charset=utf-8');
    $name = $title.".xls";
    header('Content-Disposition: attachment;filename='.$name.'');
    header('Cache-Control: max-age=0');
    $where = "1=1";
    $sql = "";
    $query = DB::Query($sql);
    // PHP文件句柄,php://output 表示直接输出到浏览器 
    $fp = fopen('php://output', 'a');
    // 输出Excel列头信息 
    $head = array('ID');
    //字符替换
    $p_new_lines = array("\r\n", "\n","\t","\r","\r\n", "<pre>","</pre>","<br>","</br>","<br/>");
    $p_change_line_in_excel_cell = '';

    foreach($head as $v){
      echo iconv('utf-8','gb2312',$v) . "\t";
    }
    echo "\n";
    // 计数器 
    $cnt = 0;
    // 每隔$limit行,刷新一下输出buffer,节约资源 
    $limit = 100000;
    // 逐行取出数据,节约内存
    while ($res = mysql_fetch_assoc($query)) {
      $cnt ++;
      if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题 
        ob_flush();
        flush();
        $cnt = 0;
      } 
      echo trim($res['id']). "\t";
      echo "\n";
    }

  }

第二种方法:

$filename='文件名称';
  $filetitle='你的标题';
  if($_POST){
    $title = '';
    ini_set('memory_limit','300M');
    header('Content-Type: application/vnd.ms-excel;charset=utf-8');
    $name = $title.".xls";
    header('Content-Disposition: attachment;filename='.$name.'');
    header('Cache-Control: max-age=0');
    echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
      xmlns:x="urn:schemas-microsoft-com:office:excel"
      xmlns="http://www.w3.org/TR/REC-html40">
    <head>
      <meta http-equiv="expires" content="Mon, 06 Jan 1999 00:00:01 GMT">
      <meta http-equiv=Content-Type content="text/html; charset=gb2312">
      <!--[if gte mso 9]><xml>
      <x:ExcelWorkbook>
      <x:ExcelWorksheets>
       <x:ExcelWorksheet>
       <x:Name></x:Name>
       <x:WorksheetOptions>
        <x:DisplayGridlines/>
       </x:WorksheetOptions>
       </x:ExcelWorksheet>
      </x:ExcelWorksheets>
      </x:ExcelWorkbook>
      </xml><![endif]-->
    </head>';
    $where = "1=1";

    $sql = " ";
    mysql_query('set names "utf8"');
    mysql_set_charset('utf8');
    $query = DB::Query($sql);

    // PHP文件句柄,php://output 表示直接输出到浏览器 
    $fp = fopen('php://output', 'a');
    // 输出Excel列头信息 
    $head = array('ID','xxx');
    //字符替换
    $p_new_lines = array("\r\n", "\n","\t","\r","\r\n", "<pre>","</pre>","<br>","</br>","<br/>");
    $p_change_line_in_excel_cell = '';
    echo "<table>";
    echo "<tr>";
    foreach($head as $v){
      echo "<td>".iconv('utf-8','gb2312',$v)."</td>";
    }
    echo "</tr>";
    // 逐行取出数据,节约内存
    while ($res = mysql_fetch_assoc($query)) {
      echo "<tr>";
      echo "<td style='vnd.ms-excel.numberformat:@'>".$res['id']."</td>";
      echo "<td>".iconv('utf-8', 'gb2312', $res['xxx']."</td>";
      echo"</tr>";
    }
    echo "</table>";
  }

以上这篇php原生导出excel文件的两种方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于PHP的全部知识点内容总结,大家还可以在下方相关文章里找到用Zend Framework框架实现Go、 thinkphp5框架实现的自定义、 php封装单文件路径上传到、 等php文章进一步学习,感谢大家的阅读和支持。

上一篇:实例详解PHP读取CSV大文件导入数据库

下一篇:Laravel中用Vue.js实现基于Ajax的表单提交错误验证实例内容

展开 +

收起 -

相关内容
PHP+MySQL动态网站开发从入门到精通

《PHP+MySQL动态网站开发从入门到精通》本书循序渐进地介绍了PHP 7 MySQL 5.7开发动态网站的主要知识和技能,提供案例、课件、命令速查手册,让你看得懂、学得会、做得出,教你快速成为网站应用开发高手。

查看详情
Modern PHP

本书让你会学到关于应用架构、规划、数据库、安全、测试、调试和部署方面的很好实践。如果你具有PHP基础知识,想提高自己的技能,不要错过这本书

查看详情
跟兄弟连学PHP

本书是畅销书《细说PHP(第2版)》升级版,以实用为设计目标,包含PHP开发最主流的各项技术,对每一个知识点都进行了深入详细的讲解,并附有大量的实例代码,图文并茂,系统地介绍了PHP的相关技术及其在实际Web开发中的应用

查看详情
PHP与MySQL高性能应用开发

PHP与MySQL高性能应用开发书中不仅讲解了OOP、设计模式,也讲解了如何进行性能优化和调试。甚至,还对于语言之外的代码重构进行了讲解,本书面向的对象是有一定PHP基础,但是又想深入学习的PHP开发者,欢迎免费下载

查看详情
PHP7内核剖析

《PHP7内核剖析》基于PHP7,深刻揭示内核原理,内容翔实,详细介绍PHP语言底层的实现,助力开发者进一步理解PHP,参与到PHP的实现中。

查看详情
PHP从入门到精通

《php从入门到精通(第4版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。《php从入门到精通(第4版)》共分4篇25章,

查看详情
PHP 7 编程实战

PHP7挟很多的、强劲的新作用和小工具强劲而成,应用这种作用和小工具能够 提升编码,编写出比老PHP版本号程序流程速度相当快的程序流程。这书主要详细介绍了PHP7有关的高级PHP编程技术。

查看详情
深入理解php:高级技巧、面向对象与核心技术

本书是一本帮助中初级PHP程序员修炼成为高级PHP程序员的书,也是一本让PHP程序员能更快、更好地进行应用开发的书,是PHP领域经典,PHPer修炼必读书,包含大量实用案例,极具可操作性,欢迎下载阅读

查看详情
PHP7从入门到精通:教学版

《PHP 7从入门到精通》以零基础讲解为宗旨,以PHP 7为蓝本,用实例引导读者深入学习PHP编程的各项技术及实战技能,全面讲解PHP与Web、XML、JavaScript、Ajax、MySQL、Zend框架等技术的交互方法,帮助大家快速学习,欢迎下载。

查看详情
学习笔记
网友NO.777392

PHPExcel在linux环境下导出报500错误的解决方法

原先我导出为 XLSX 格式,用的是 $objWriter = IOFactory::createWriter($objPHPExcel, 'Excel2007'); 报错,纠结就纠结在,在开发环境和测试环境都没问题,放在生产环境直接 500 错误。 后来我改成导出 XLS 格式, $objWriter = IOFactory::createWriter($objPHPExcel, 'Excel5'); 问题解决了,具体为什么待有空了研究下!!! 以上这篇PHPExcel在linux环境下导出报500错误的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

网友NO.496845

PHPExcel导入Excel表格到MySQL数据库的简单实例详解

如下所示: ?phpdefine(BASE_URL, realpath(dirname(__FILE__)));require_once BASE_URL . /PHPExcel/PHPExcel.php;//引入PHPExcel类文件//excel文件的地址$excel_fiel_path = ./phpexcel.xls;$PHPExcel = new PHPExcel();// 实例化PHPExcel工具类//分析文件获取后缀判断是2007版本还是2003$extend = pathinfo(./ . $excel_fiel_path);$extend = strtolower($extend[extension]); // 判断xlsx版本,如果是xlsx的就是2007版本的,否则就是2003if ($extend==xlsx) { $PHPReader = new PHPExcel_Reader_Excel2007(); $PHPExcel = $PHPReader-load(./ . $excel_fiel_path);}else{ $PHPReader = new PHPExcel_Reader_Excel5(); $PHPExcel = $PHPReader-load(./ . $excel_fiel_path);} /* 第二种方法*/$objWorksheet = $PHPExcel-getActiveSheet();$highestRow = $objWorksheet-getHighestRow(); echo highestRow=.$highestRow;echo br;$highestColumn = $objWorksheet-getHighestColumn();$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//总列数echo highestColumnIndex=.$highest……

网友NO.527553

PHPExcel笔记, mpdf导出

phpexcel常用处理 ##导入类库require 'PHPExcel/Classes/PHPExcel.php';require 'PHPExcel/Classes/PHPExcel/Writer/Excel5.php'; //非07格式的写出类 ##基础属性设定$objPHPExcel = \PHPExcel_IOFactory::load('a.xls'); //读入指定excel文件$objPHPExcel-setActiveSheetIndex(0); //指定活动工作表$objPHPExcel-getActiveSheet()-getDefaultStyle()-getFont()-setName('宋体');$objPHPExcel-getProperties()-setTitle('xxx'); ##单元格编辑$objPHPExcel-getActiveSheet()-setCellValue('A3', 'xxx'); //设定A3单元格值为xxx ##单元格绘图$objDrawing = new \PHPExcel_Worksheet_Drawing();$objDrawing-setPath('a.jpg'); //指定图片路径。若要远程图片需PHPExcel/Classes/PHPExcel/Worksheet/Drawing.php:106处file_exists换成file_get_contents$objDrawing-setCoordinates('A4'); //指定在A4单元格绘图$objDrawing-setName('Photo');$objDrawing-setDescription('Photo');$objDrawing-setHeight(120);$objDrawing-setWidth(100);$objDrawing-setOffsetX(7);$objDrawing-setOffsetY(7);$obj……

网友NO.202528

PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)

本文实例讲述了PHP实现仿百度文库,豆丁在线文档效果。分享给大家供大家参考,具体如下: 由于项目要实现类似百度文库的功能,又是我一个人做的项目,所以就想到找免费的现成的来使用。在网上找到的都是一样的。如下: Flash Paper支持Office文档(.doc,.xls,.ppt)直接转换为PDF或SWF,速度很快,效果较好。可惜,Flash Paper V2.2后没有再更新了。安装Flash Paper后,可以直接使用命令调用FlashPrinter.exe,实现批量转换。 例如:C:\FlashPaper2.2\FlashPrinter.exe C:\Flex技术简介.ppt -o C:\Flex技术简介.swf 下载个FlashPaper,安装好之后,控制面板的打印机那里会出现一个虚拟的打印机,这个就说明安装成功了,win7下我试过32位的和64位的都安装不了。 在命令行试一下上面的命令,路径根据自身调整。执行后,成功就说明可以用了. 接下来就是php使用了,php使用 exec,或者system等来执行……

<
1
>

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757