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 相关文章推荐
判“新”函数:得到今天与明天的秒数
Oct 09 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
Sep 23 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
php获取远程文件内容的函数
Nov 02 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
Laravel学习教程之路由模块
Aug 18 PHP
PHP递归的三种常用方式
Feb 28 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 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和ACCESS写聊天室(六)
2006/10/09 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
浅谈PHP进程管理
2019/03/08 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
Python实现登陆文件验证方法
2018/10/06 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
尼克松手表官网:Nixon手表
2019/03/17 全球购物
客服部工作职责范本
2014/02/14 职场文书
中考冲刺决心书
2014/03/11 职场文书
教师群众路线心得体会
2014/11/04 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
Python实现抖音热搜定时爬取功能
2022/03/16 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js