近期做了一个项目须要把订单的信息显示出来。而且可以把相关信息放到一个.csv 文件里,下载到浏览器。首先我要说明的是.csv 文件,PHP 有专门的函数去解析该类型的文件,相关函数大家可以去官网查看。注意.csv 文件内容的编码格式是gbk格式的,所以有必要对字符格式进行转码。

文件的样式例如以下。

一、首先要定义header 头

  1. // 输出Excel文件头。可把user.csv换成你要的文件名称
  2. header ( 'Content-Type: application/vnd.ms-excel' );
  3. header ( 'Content-Disposition: attachment;filename="订单数据.csv"' );
  4. header ( 'Cache-Control: max-age=0' );
  5. // 打开PHP文件句柄,php://output 表示直接输出到浏览器
  6. $fp = fopen ( 'php://output', 'a' );
  7. // 输出Excel列名信息

二 、以下是文件的头部

  1. $head = array ('订单号','','订单名称','','业务ID','','渠道ID','','渠道类型','','产品线名称','','原始订单号','','订单金额',
  2. '','From值','','订单时间','','收款合同号','','渠道名称','','付款合同号','','供应商名称','','运营平台','','产品类型',
  3. '','记账时间','','渠道成本比例','','渠道成本','','应收账款','','结算比例','','应付结算','','是否已回款','','是否已提批次',
  4. '','备注');
  5. foreach ( $head as $i => $v ) {
  6. // CSV的Excel支持GBK编码,一定要转换,否则乱码
  7. $head [$i] = iconv ( 'utf-8', 'gbk', $v );
  8. }
  9. // 将数据通过fputcsv写到文件句柄
  10. fputcsv ( $fp, $head );

三、以下是文件的内容。以我的样例是从数据库读出来的,看不懂没关系,原理是把结果查出来放到数组中,循环数组,把每一个结果放到一个新的数组而且进行编码。忘了告诉你我用的是CI(codeignite)框架

  1. if ($this->input->get () != false) {
  2. // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存。从句柄中一行一行读就可以
  3. $sql = "select Charge_final.charge_id,
  4. Charge_final.product_name,
  5. Charge_final.business_id,
  6. Charge_final.channel_id,
  7. Charge_final.channel_type,
  8. bass_productline.product_line_name,
  9. Charge_final.business_linkid,
  10. Charge_final.fee,
  11. Charge_final.msgfrom,
  12. Charge_final.charge_time,
  13. Charge_final.income_contract,
  14. Charge_final.income_channel_name,
  15. Charge_final.payment_contract,
  16. Charge_final.merchant_name,
  17. Charge_final.platform,
  18. Charge_final.product_type,
  19. Charge_final.bill_time,
  20. Charge_final.channel_rate,
  21. Charge_final.channel_fee,
  22. (Charge_final.fee-Charge_final.channel_fee) as account,
  23. Charge_final.payment_rate,
  24. Charge_final.payment_fee,
  25. Charge_final.income_id,
  26. Charge_final.payment_id,
  27. Charge_final.note
  28. from {$this->Charge_final} as Charge_final left join
  29. {$this->bass_productline} as bass_productline
  30. on Charge_final.channel_id=bass_productline.channel_id and
  31. Charge_final.channel_type=bass_productline.channel_type
  32. where 1=1 $conditions order by Charge_final.charge_time desc";
  33. $query = $this->db->query ( $sql );
  34. // 计数器
  35. $cnt = 0;
  36. // 每隔$limit行。刷新一下输出buffer。不要太大,也不要太小
  37. $limit = 8000;
  38. foreach ( $query->result_array () as $row ) {
  39. $cnt ++;
  40. if ($limit == $cnt) { // 刷新一下输出buffer,防止因为数据过多造成问题
  41. ob_flush ();
  42. flush ();
  43. $cnt = 0;
  44. }
  45. $income_id=$row['income_id']==0?
  46.  
  47. '未回款':'回款';
  48. $payment_id=$row['payment_id']==0?'未提':'已提';
  49. // 读取表数据
  50. $content = array ();
  51. $content [] = iconv ( 'utf-8', 'gbk', $row ['charge_id'] . "\t" );
  52. $content [] = '';
  53. $content [] = iconv ( 'utf-8', 'gbk', $row ['product_name'] );
  54. $content [] = '';
  55. $content [] = iconv ( 'utf-8', 'gbk', $row ['business_id'] . "\t" );
  56. $content [] = '';
  57. $content [] = iconv ( 'utf-8', 'gbk', $row ['channel_id'] . "\t" );
  58. $content [] = '';
  59. $content [] = iconv ( 'utf-8', 'gbk', $row ['channel_type'] );
  60. $content [] = '';
  61. $content [] = iconv ( 'utf-8', 'gbk', $row ['product_line_name'] );
  62. $content [] = '';
  63. $content [] = iconv ( 'utf-8', 'gbk', $row ['business_linkid'] );
  64. $content [] = '';
  65. $content [] = iconv ( 'utf-8', 'gbk', $row ['fee'] );
  66. $content [] = '';
  67. $content [] = iconv ( 'utf-8', 'gbk', $row ['msgfrom'] );
  68. $content [] = '';
  69. $content [] = iconv ( 'utf-8', 'gbk', $row ['charge_time'] . "\t" );
  70. $content [] = '';
  71. $content [] = iconv ( 'utf-8', 'gbk', $row ['income_contract'] );
  72. $content [] = '';
  73. $content [] = iconv ( 'utf-8', 'gbk', $row ['income_channel_name'] );
  74. $content [] = '';
  75. $content [] = iconv ( 'utf-8', 'gbk', $row ['payment_contract'] );
  76. $content [] = '';
  77. $content [] = iconv ( 'utf-8', 'gbk', $row ['merchant_name'] );
  78. $content [] = '';
  79. $content [] = iconv ( 'utf-8', 'gbk', $row ['platform'] );
  80. $content [] = '';
  81. $content [] = iconv ( 'utf-8', 'gbk', $row ['product_type'] );
  82. $content [] = '';
  83. $content [] = iconv ( 'utf-8', 'gbk', $row['bill_time'].'\t');
  84. $content [] = '';
  85. $content [] = iconv ( 'utf-8', 'gbk', $row ['channel_rate'] );
  86. $content [] = '';
  87. $content [] = iconv ( 'utf-8', 'gbk', $row ['channel_fee'] );
  88. $content [] = '';
  89. $content [] = iconv ( 'utf-8', 'gbk', $row ['account'] );
  90. $content [] = '';
  91. $content [] = iconv ( 'utf-8', 'gbk', $row ['payment_rate'] );
  92. $content [] = '';
  93. $content [] = iconv ( 'utf-8', 'gbk', $row ['payment_fee'] );
  94. $content [] = '';
  95. $content [] = iconv ( 'utf-8', 'gbk', $income_id );
  96. $content [] = '';
  97. $content [] = iconv ( 'utf-8', 'gbk', $payment_id);
  98. $content [] = '';
  99. $content [] = iconv ( 'utf-8', 'gbk', $row ['note'] );
  100. fputcsv ( $fp, $content );
  101. }

三、文件的尾部

  1. $sql="select sum(Charge_final.fee) as amountorder,
  2. sum(Charge_final.channel_fee) as sumchannel_fee,
  3. sum(Charge_final.fee-Charge_final.channel_fee) as sumaccout,
  4. sum(Charge_final.payment_fee) as sumpayfee
  5. from {$this->Charge_final} as Charge_final
  6. left join {$this->bass_productline} as bass_productline on
  7. Charge_final.channel_id=bass_productline.channel_id and
  8. Charge_final.channel_type=bass_productline.channel_type
  9. where 1=1 $conditions";
  10. $querys = $this->db->query ( $sql );
  11. $ro = $querys->result_array ();
  12. $this->data ['ro'] = $ro;
  13. $amountorder=$ro['0']['amountorder'];
  14. $sumchannel_fee=$ro['0']['sumchannel_fee'];
  15. $sumaccout=$ro['0']['sumaccout'];
  16. $sumpayfee=$ro['0']['sumpayfee'];
  17. $foot = array ('统计','','','','','','','','','','','','','',"$amountorder",
  18. '','','','','','','','','','','','','','','','',
  19. '','','','','',"$sumchannel_fee",'',"$sumaccout",'','','',"$sumpayfee",'','','','',
  20. '','');
  21. foreach ($foot as $i => $v ) {
  22. // CSV的Excel支持GBK编码。一定要转换,否则乱码
  23. $foot[$i] = iconv ( 'utf-8', 'gbk', $v );
  24. }
  25. // 将数据通过fputcsv写到文件句柄
  26. fputcsv ( $fp, $foot);
  27. }
  28. }
  29. }

PHP 生成.csv 文件并下载到浏览器的更多相关文章

  1. PHP通过sql生成CSV文件并下载,PHP实现文件下载

    /** * PHP通过sql生成CSV文件并下载 * @param string $sql 查询sql,结果为二维数组 * @param array $title 数据,CSV文件标题 * @para ...

  2. 24.-Django生成csv文件及下载

    一.csv文件定义 逗号分隔值(comma-separated values, csv,有时页称字符分隔值,因为分分隔字符页可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本) 说明:可被常见 ...

  3. Django生成CSV文件

    1.生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 2.生成小的CSV文件 这里将用一个生成小的CSV文 ...

  4. Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

  5. Java生成CSV文件

    1.新CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils; import java.io.BufferedWriter; im ...

  6. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  7. django 动态生成CSV文件

    CSV (Comma Separated Values),以纯文本形式存储数字和文本数据的存储方式.纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样的数据.CSV文件由任意数目的记录组成,记 ...

  8. 第二章:视图层 - 9:动态生成CSV文件

    CSV (Comma Separated Values),以纯文本形式存储数字和文本数据的存储方式.纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样的数据.CSV文件由任意数目的记录组成,记 ...

  9. java导出生成csv文件

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...

随机推荐

  1. 零基础学习云计算及大数据DBA集群架构师【Linux系统\网络服务及安全配置2015年1月8日周五】

    考试考一天,得分94,最后一题防火墙当时还没搞明白 考题如下: 注意事项: .确保在重启主机后所有配置仍然生效. .selinux 必须为Enforing 模式,防火墙必须开始.默认策略必须清空. . ...

  2. CSS投影实现方式

    备用素材: 1.png    shadow.png 第一种方式: 利用负边距实现 最终效果图: <!DOCTYPE html> <html lang="en"&g ...

  3. Discuz!NT 3.5.2正式版与Asp.net网站会员信息整合

    Discuz!NT 提供了很多对外的接口利于与别的网站进行整合,经本人亲测,觉得开放的接口还是挺到位的.开发.测试一次通过,只不过api文档寻找无门,只能自己琢磨,费了不少周折,不过,功夫不负有心人, ...

  4. StringEscapeUtils的使用

    使用commons-lang.jar import org.apache.commons.lang.StringEscapeUtils; public class T { public static ...

  5. Dom对象和jQuery包装集

    Dom对象 在传统的JavaScript开发中,我们经常都是首先获取Dom对象,比如: document.getElementById("dv1"); 我们经常使用getEleme ...

  6. POJ 模拟题集合

    http://www.cppblog.com/Uriel/articles/101592.html 感觉这个暑假没有去年有激情啊,,,还没到状态就已经块上学了,,, 真是弱暴了,,,找几道模拟题刷刷. ...

  7. PHP扩展开发(6) - VS2012下strncasecmp和fopen函数warning

    1. fopen   warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s i ...

  8. Backbone一些参考资源

    最近想找一个single-page JavaScript application Framework ,而不是单纯的Toolkit+Widget.来看YUI3的一段介绍: 引用 The YUI App ...

  9. JS 闭包问题

    一.什么是闭包?“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他描述的太 ...

  10. 关于uC/OS的简单学习(转)

    1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...