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 style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar('编号') . '</td>';
 echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar('用户名') . '</td>';
 echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar('密码') . '</td>';
 echo '</thead></tr>';
?>
<?php
 echo '<tbody>';
 //设置tbody输出
 while($re = $res->fetch(PDO::FETCH_ASSOC)){
  echo '<tr>';
  echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar($re['id']) . '</td>';
  echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar($re['user']) . '</td>';
  echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . 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 style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar('编号') . '</td>';
 echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar('用户名') . '</td>';
 echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar('密码') . '</td>';
 echo '</thead></tr>';
?>

<?php
 echo '<tbody>';
 //设置tbody输出
 while($re = $res->fetch(PDO::FETCH_ASSOC)){
  echo '<tr>';
  echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar($re['id']) . '</td>';
  echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar($re['user']) . '</td>';
  echo '<td style="border-bottom:1px solid black;padding:10px;text-align:center;">' . Excel::setChar($re['pwd']) . '</td>';
  echo '</tr>';
 }
 echo '</tbody></table>';
?>

6、结语

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

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

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

(0)

相关推荐

  • 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: attac

  • PHP实现导出带样式的Excel

    工作中做导出的时候,需要导出自定义的表格或嫌弃导出的Excel格式太难看了. 需要设置颜色.字号大小.加粗.合并单元格等等. 效果图: PHP代码: /** * 导出文件 * @return string */ public function export() { $file_name = "成绩单-".date("Y-m-d H:i:s",time()); $file_suffix = "xls"; header("Content-T

  • php导入导出excel实例

    这里实现的PHP导入导出excel功能用到的是开源PHPExcel,执行下面的操作之前请先下载该类库文件,官方网站:http://www.codeplex.com/PHPExcel,官网案例代码很多,导出pdf什么的都有,这里主要介绍PHP导入导出excel的功能,导出excel文件是office2007格式,同时兼容2003. php导入excel导入的excel文件的数据格式,截图如下:下面是将该excel文件的数据导入到数据库的具体代码: 复制代码 代码如下: <?phprequire_o

  • PHP导入导出Excel代码

    一.导入 导入需要使用能读取Excel的组件,网上也有比较好的组件,这里分享我使用的:下载  提取码:vxyn.(注意两个文件有引用关系) <?php //传入要导入的Excel的文件名 function import_to_DB($filename) { require_once'reader.php'; $data = new Spreadsheet_Excel_Reader(); //创建读取Excel的对象 $data->setOutputEncoding('utf-8'); //设置

  • php生成excel文件的简单方法

    生成excel 当然使用的是 phpExcel这个类库了,可是它太麻烦了,对于只要简单生成来说有点不值得 什么叫简单,把数据库的数据导入到excel就行了, 这个就是简单了 下面看一段代码(代码来自网络) 注意要双引号的字符串 复制代码 代码如下: <?php header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=test.xls"); ech

  • 利用phpExcel实现Excel数据的导入导出(全步骤详细解析)

    很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人研究phpExcel的使用例程总结出来的使用方法,接下来直接进入正题. 首先先说一下,本人的这段例程是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错,如果有问题大家务必要对路劲是否引用正确进行测试. (一)导入Excel 第一,在前台html页面

  • 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

  • MongoDB单表数据的导出和恢复实例讲解

    MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 数据库 数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的文件.一个单一的MongoDB服务器通常有多个数据库. 集合 集合是一组MongoDB的文档.它相当于一个RDBMS表.收集存在于一个单一的数据库.集合不执行模式.集合内的文档可以有不同的领域.通常情况下,一个集合中的所有文件是相同或相关的目的. 文档 文档是一组键 - 值对.文件动态模式.动态模式

  • JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)

    一.课程概述 在Web应用系统开发中,文件上传功能是非常常用的功能,今天来主要讲讲JavaWeb中的文件上传功能的相关技术实现,并且随着互联网技术的飞速发展,用户对网站的体验要求越来越高,在文件上传功能的技术上也出现许多创新点,例如异步上传文件,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,大文件断点续传,大文件秒传等等. 本课程需要的基础知识: 了解基本的Http协议内容 基本IO流操作技术 Servlet基础知识 javascript/jQuery技术基础知识 二.文件上传的基础 对于文件

  • jxl 导出数据到excel的实例讲解

    优点: Jxl对中文支持非常好,操作简单,方法看名知意. Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写 支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过) 生成Excel 2000标准格式 支持字体.数字.日期操作 能够修饰单元格属性 支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式. 缺点: 效率低,图片支持不完善,对格式的支持不如POI强大 案例: S

  • python 将数据保存为excel的xls格式(实例讲解)

    python提供一个库 xlwt ,可以将一些数据 写入excel表格中,十分的方便.贴使用事例如下. #引入xlwt模块(提前pip下载好) import xlwt #使用workbook方法,创建一个新的工作簿 book = xlwt.Workbook(encoding='utf-8',style_compression=0) #添加一个sheet,名字为mysheet,参数overwrite就是说可不可以重复写入值,就是当单元格已经非空,你还要写入 sheet = book.add_she

  • phpexcel导入excel处理大数据(实例讲解)

    先下载对应phpExcel 的包就行了https://github.com/PHPOffice/PHPExcel 下载完成 把那个Classes 这个文件夹里面的 文件跟文件夹拿出来就好了. 直接写到PHPExcel 这个文件里面的.调用很简单.引入phpExcel 这个类传递对应的excel 文件的路径就好了 现在上传到指定的目录,然后加载上传的excel文件读取这里读取是的时候不转换数组了.注意:是Sheet可以多个读取,php上传值要设置大,上传超时要设置长. header('Conten

  • java动态导出excel压缩成zip下载的方法

    本文实例为大家分享了java动态导出excel压缩成zip下载的具体代码,供大家参考,具体内容如下 package pack.java.io.demo; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.text.Simpl

  • Python简单爬虫导出CSV文件的实例讲解

    流程:模拟登录→获取Html页面→正则解析所有符合条件的行→逐一将符合条件的行的所有列存入到CSVData[]临时变量中→写入到CSV文件中 核心代码: ####写入Csv文件中 with open(self.CsvFileName, 'wb') as csvfile: spamwriter = csv.writer(csvfile, dialect='excel') #设置标题 spamwriter.writerow(["游戏账号","用户类型","游戏

  • ExtJs Excel导出并下载IIS服务器端遇到的问题

    项目是Extjs的主要针对于Extjs GridPanel数据导出这块先做一下说明. 我们可以通过Ext.getcmp()方法获取到GridPanel对象并通过重写的方法获取Excel字符串具体方法可以百度到.这个应该也不是什么大问题. 复制代码 代码如下: //输出报表 function ExportReport(title) { var vExportContent = Ext.getCmp("gridPanel").getExcelXml(null, title); if (Ex

  • java 文件大数据Excel下载实例代码

    java 文件大数据Excel下载实例代码 excel可以用xml表示.故可以以此来实现边写边下载文件 package com.tydic.qop.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.I

随机推荐