thinkPHP导出csv文件及用表格输出excel的方法


Posted in PHP onDecember 30, 2015

本文实例讲述了thinkPHP导出csv文件及用表格输出excel的方法。分享给大家供大家参考,具体如下:

1.thinkphp导出csv文件

导出csv文件可能就那几行代码,今天有个问题困扰我好久,就是导出之后出现一些html代码,这个不应该,view里面是空的,controller中最后也没有$this->display(),最后细心看到think_page_trace这样的字样,恍然大悟,是页面的跟踪日志,这个默认是会输出来的。最后在方法后面加了一个exit结束就好了,下面是代码:

1.IndexController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
 public function index(){
  $hotel = M('keywords')->field('PageName,Page')->select();
  $str = "关键字,名称\n";
  $str = iconv('utf-8','gb2312',$str);
  $result = mysql_query("select PageName,Page from hotel_keywords");
  while($row=mysql_fetch_array($result)){
   $PageName = iconv('utf-8','gb2312',$row['PageName']);
   $Page = iconv('utf-8','gb2312',$row['Page']);
   $str .= $PageName.",".$Page."\n";
  }
  $fileName = date('Ymd').'.csv';
  $model = D('Keywords');
  $model->export_csv($fileName,$str);
  exit;
 }
}

2.KeywordsModel.class.php

<?php 
namespace Home\Model;
use Think\Model;
class KeywordsModel extends Model{
 public function export_csv($filename, $data){
  header("Content-type:text/csv"); 
  header("Content-Disposition:attachment;filename=".$filename); 
  header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 
  header('Expires:0'); 
  header('Pragma:public');
  echo $data;
  
 }
}

奥妙就在IndexController.class.php代码最后一句的exit这里,如果不写这句,输出的excel里面有html源码,截图如下:

thinkPHP导出csv文件及用表格输出excel的方法

2.用表格输出excel

如下代码purchase_prospects.php

<?php
require('page_header.php');
$site_id = getIfSet($_GET, 'site_id', 0);
$customer_type = getIfSet($_GET, 'customer_type',0);
$DB = Database::connect($site_id);
if($site_id>0 && $customer_type>0){
 $sql = '';
 $out = ''; 
 $short_name_array = SiteSettings::$SITE_SHORT_NAME;
 $short_name = $short_name_array[$site_id]; 
 switch ($customer_type) {
  case '1':{
   $sql = "SELECT 
      email, CONCAT(UCASE(LEFT(firstname, 1)),SUBSTRING(firstname, 2)) AS firstname, CONCAT(UCASE(LEFT(lastname, 1)),SUBSTRING(lastname, 2)) AS lastname 
     FROM customers 
     WHERE site_id =$site_id 
      AND email NOT REGEXP '.+(avanquest)|(planetart)|(novadevelop)|(qatest).+' 
      AND email IN(SELECT a.email FROM customers a INNER JOIN orders b ON a.id=b.`customer_id` AND b.is_test=0 AND a.site_id =$site_id) 
      AND email NOT IN (SELECT email_address FROM `newsletter_unsubscribes` WHERE site_id =$site_id);";
   $res = $DB->query($sql);
   $out = '<table class="data_table"><tr><th>email</th><th>firstname</th><th>lastname</th></tr>';
   while($row = mysql_fetch_array($res)){
    $out .= '<tr><td>'.$row['email'].'</td><td>'.$row['firstname'].'</td><td>'.$row['lastname'].'</td></tr>';
   }
   $short_name .= '_purchased';
   break;
  }
  case '2':{
   $DB->query("DROP TEMPORARY TABLE IF EXISTS tmp_purchase;");
   $DB->query("CREATE TEMPORARY TABLE tmp_purchase SELECT a.email FROM customers a INNER JOIN orders b ON a.id=b.`customer_id` AND b.is_test=0 AND a.site_id =$site_id; ");
   $DB->query("DROP TEMPORARY TABLE IF EXISTS tmp_nopurchase;");
   $DB->query("CREATE TEMPORARY TABLE tmp_nopurchase SELECT email FROM customers WHERE site_id =$site_id AND email NOT IN(SELECT email FROM tmp_purchase);");
   if(9 != $site_id){
    $datatype = SiteSettings::getPurchaseDataType($site_id);
    $DB->query("INSERT tmp_nopurchase SELECT DISTINCT email FROM triggered_email_data WHERE datatype='$datatype' AND email NOT IN(SELECT email FROM tmp_purchase);");
   }
   $sql = "SELECT DISTINCT email FROM tmp_nopurchase WHERE email NOT REGEXP '.+(avanquest)|(planetart)|(novadevelop)|(qatest).+' AND Email REGEXP '[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$' AND email NOT IN (SELECT email_address FROM `newsletter_unsubscribes` WHERE site_id =$site_id);";
   $res = $DB->query($sql);
   $out = '<table class="data_table"><tr><th>email</th></tr>';
   while($row = mysql_fetch_array($res)){
    $out .= '<tr><td>'.$row['email'].'</td></tr>';
   }
   $short_name .= '_non-purchased and signup';
   break;
  }
  default:
   break;
 }
 $out .= '</table>';
 header("Content-type:application/vnd.ms-excel");
 header("Content-Disposition:filename=$short_name.xls");
 echo $out;
 exit;
}
?>
<h1>Purchase Prospects Report</h1>
<form name="frm" method="get" action="purchase_prospects.php">
<strong>Select Site:</strong> 
<select name="site_id" id="site_id">
 <option value="0">== select site ==</option>
 <option value="1">STI</option>
 <option value="2">PA</option>
 <option value="3">CW</option>
 <option value="6">MCC</option>
 <option value="9">CB</option>
 <option value="4">STIUK</option>
 <option value="8">MCCUK</option>
</select>   
   
<strong>Select Type:</strong>
<select id="customer_type" name="customer_type">
 <option value="0">== select type ==</option>
 <option value="1">purchased</option>
 <option value="2">non-purchased and signup</option>
</select>
  
   
<input id="submit" type="submit" value="Run »">
</form>
<script type="text/javascript">
 $(function(){
  $("#submit").click(function(){
   if('0' == $("#site_id").val() || '0' == $("#customer_type").val()){
    alert('please select Site and Site');
    return false;
   }
  })
 });
</script>

这样也可以导出ecxcel文件,截图如下

thinkPHP导出csv文件及用表格输出excel的方法

依然注意最后一句exit;如果没有这一句,excel里面会有一些页面元素。

希望本文所述对大家基于thinkPHP框架的php程序设计有所帮助。

PHP 相关文章推荐
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
php中模拟POST传递数据的两种方法分享
Sep 16 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
深入HTTP响应状态码速查表的详解
Jun 07 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
初识ThinkPHP控制器
Apr 07 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
PHP 多任务秒级定时器的实现方法
May 13 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
PHP合并两个或多个数组的方法
Jan 20 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 #PHP
分享PHP守护进程类
Dec 30 #PHP
如何写php守护进程(Daemon)
Dec 30 #PHP
PHP汉字转换拼音的函数代码
Dec 30 #PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 #PHP
php获取当前页面完整URL地址
Dec 30 #PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 #PHP
You might like
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
自我评价范文
2013/12/22 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
交通事故协议书范文
2014/04/16 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
浅谈Redis的几个过期策略
2021/05/27 Redis
用JS写一个发布订阅模式
2021/11/07 Javascript
Python Django项目和应用的创建详解
2021/11/27 Python
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
MySQL数据库查询之多表查询总结
2022/08/05 MySQL