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 相关文章推荐
火车头采集器3.0采集图文教程
Mar 17 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
PHP中session跨子域的三种实现方法
Jul 25 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
laravel 中某一字段自增、自减的例子
Oct 11 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 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 array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
基于empty函数的判断详解
2013/06/17 PHP
php Session存储到Redis的方法
2013/11/04 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
lib.utf.js
2007/08/21 Javascript
JavaScript 数组运用实现代码
2010/04/13 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
如何用Lucene索引数据库
2016/02/23 面试题
安全生产工作汇报
2014/10/28 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
计划生育个人总结
2015/03/02 职场文书
毕业设计致谢词
2015/05/14 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
小学教师读书笔记
2015/07/01 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript