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应用程序来获取Web服务器的状态信息
Oct 09 PHP
header跳转和include包含问题详解
Sep 08 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
php以post形式发送xml的方法
Nov 04 PHP
html静态页面调用php文件的方法
Nov 13 PHP
golang与PHP输出excel示例
Jul 22 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 PHP
关于laravel 子查询 &amp; join的使用
Oct 16 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
PHP实现爬虫爬取图片代码实例
Mar 03 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模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
js实现漫天星星效果
2017/01/19 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
python 调用HBase的简单实例
2016/12/18 Python
使用Python进行目录的对比方法
2018/11/01 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
基于python使用tibco ems代码实例
2019/12/20 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
生物制药自我鉴定
2014/01/25 职场文书
司马光教学反思
2014/02/01 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
暑期培训心得体会
2014/09/02 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
医学生自荐信范文
2015/03/05 职场文书
仙境之桥观后感
2015/06/16 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python
Android存储中最基本的文件存储方式
2022/04/30 Java/Android