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 相关文章推荐
php5 mysql分页实例代码
Apr 10 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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笔记之:php数组相关函数的使用
2013/04/26 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
PHP异常处理Exception类
2015/12/11 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
JavaScript 参考教程
2006/12/29 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
用Python给文本创立向量空间模型的教程
2015/04/23 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
django主动抛出403异常的方法详解
2019/01/04 Python
python批量创建指定名称的文件夹
2019/03/21 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
python numpy实现rolling滚动案例
2020/06/08 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
python 基于wx实现音乐播放
2020/11/24 Python
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
实习生自荐信范文
2013/11/13 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
vue打包时去掉所有的console.log
2022/04/10 Vue.js