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

文件的样式例如以下。

一、首先要定义header 头

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

二 、以下是文件的头部

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

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

                     if ($this->input->get () != false) {
// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存。从句柄中一行一行读就可以
$sql = "select Charge_final.charge_id,
Charge_final.product_name,
Charge_final.business_id,
Charge_final.channel_id,
Charge_final.channel_type,
bass_productline.product_line_name,
Charge_final.business_linkid,
Charge_final.fee,
Charge_final.msgfrom,
Charge_final.charge_time,
Charge_final.income_contract,
Charge_final.income_channel_name,
Charge_final.payment_contract,
Charge_final.merchant_name,
Charge_final.platform,
Charge_final.product_type,
Charge_final.bill_time,
Charge_final.channel_rate,
Charge_final.channel_fee,
(Charge_final.fee-Charge_final.channel_fee) as account,
Charge_final.payment_rate,
Charge_final.payment_fee,
Charge_final.income_id,
Charge_final.payment_id,
Charge_final.note
from {$this->Charge_final} as Charge_final left join
{$this->bass_productline} as bass_productline
on Charge_final.channel_id=bass_productline.channel_id and
Charge_final.channel_type=bass_productline.channel_type
where 1=1 $conditions order by Charge_final.charge_time desc";
$query = $this->db->query ( $sql );
// 计数器
$cnt = 0;
// 每隔$limit行。刷新一下输出buffer。不要太大,也不要太小
$limit = 8000;
foreach ( $query->result_array () as $row ) {
$cnt ++;
if ($limit == $cnt) { // 刷新一下输出buffer,防止因为数据过多造成问题
ob_flush ();
flush ();
$cnt = 0;
}
$income_id=$row['income_id']==0? '未回款':'回款';
$payment_id=$row['payment_id']==0?'未提':'已提';
// 读取表数据
$content = array ();
$content [] = iconv ( 'utf-8', 'gbk', $row ['charge_id'] . "\t" );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['product_name'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['business_id'] . "\t" );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['channel_id'] . "\t" );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['channel_type'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['product_line_name'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['business_linkid'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['fee'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['msgfrom'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['charge_time'] . "\t" );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['income_contract'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['income_channel_name'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['payment_contract'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['merchant_name'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['platform'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['product_type'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row['bill_time'].'\t');
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['channel_rate'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['channel_fee'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['account'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['payment_rate'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['payment_fee'] );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $income_id );
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $payment_id);
$content [] = '';
$content [] = iconv ( 'utf-8', 'gbk', $row ['note'] );
fputcsv ( $fp, $content );
}

三、文件的尾部

                      $sql="select sum(Charge_final.fee) as amountorder,
sum(Charge_final.channel_fee) as sumchannel_fee,
sum(Charge_final.fee-Charge_final.channel_fee) as sumaccout,
sum(Charge_final.payment_fee) as sumpayfee
from {$this->Charge_final} as Charge_final
left join {$this->bass_productline} as bass_productline on
Charge_final.channel_id=bass_productline.channel_id and
Charge_final.channel_type=bass_productline.channel_type
where 1=1 $conditions";
$querys = $this->db->query ( $sql );
$ro = $querys->result_array ();
$this->data ['ro'] = $ro;
$amountorder=$ro['0']['amountorder'];
$sumchannel_fee=$ro['0']['sumchannel_fee'];
$sumaccout=$ro['0']['sumaccout'];
$sumpayfee=$ro['0']['sumpayfee'];
$foot = array ('统计','','','','','','','','','','','','','',"$amountorder",
'','','','','','','','','','','','','','','','',
'','','','','',"$sumchannel_fee",'',"$sumaccout",'','','',"$sumpayfee",'','','','',
'','');
foreach ($foot as $i => $v ) {
// CSV的Excel支持GBK编码。一定要转换,否则乱码
$foot[$i] = iconv ( 'utf-8', 'gbk', $v );
}
// 将数据通过fputcsv写到文件句柄
fputcsv ( $fp, $foot);
}
}
}

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. PHP页面之间跳转方法总结

    编程中,在页面之间进行跳转是必须的.这里列出了三种办法,供参考. 一.用HTTP头信息 也就是用PHP的HEADER函数.PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通 ...

  2. HID 报告描述符精细说明.

    1,报告描述符概述    1.1) 报表描述符        报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的.报表描述符非常复杂而有弹性,因为它 ...

  3. Messager( 消息窗口) 组件

    一. 加载方式消息窗口提供了不同的消息框风格,包含 alert(警告框).confirm(确认框).prompt(提示框).progress(进度框)等.所有消息框都是异步的,用户可以在交互消息之后使 ...

  4. SQLServer2008/2012 删除所有表视图存储过程

    SQLServer2008/2012 删除所有表视图存储过程 -------------------删除所有的表-------------------use xuwenbin111--/第1步**** ...

  5. 使用Razor来进行页面布局

    UI设计师们现在也讲究页面设计的语义化和结构化,把一个页面分成很多个模块,使用语义化的类名或id来标识这些模块.Razor推出了新的布局解决方案来迎合这一潮流. 这里涉及到Razor的一些语法,大家可 ...

  6. javascript 获取图片原始尺寸

    javascript 获取图片原始尺寸 function getImgInfo(url){ var img = new Image(), loaded = false; var info = {}; ...

  7. 武汉科技大学ACM :1002: 零起点学算法28——判断是否闰年

    Problem Description 输入年份,判断是否闰年 Input 输入一个整数n(多组数据) Output 如果是闰年,输出yes,否则输出no(每组数据一行) Sample Input 2 ...

  8. linux 进程备忘

    进程间同步互斥方式: 1.管道pipe(亲属进程适用),命名管道fifopipe 2.信号量 3.共享内存配合信号量

  9. Sicily 2005.Lovely Number

    题目地址:2005.Lovely Number 思路: 若测试数据出现的次数为奇数,则输出它. 所以,可以先排序,若前后相等,前后都设为0,最后不为0的则可以输出. 具体代码如下: #include ...

  10. js判断一个变量是否为数组的解决方案

    前端开发中,在做项目的时候,我们经常需要对一个变量进行数组类型的判断,当然即使你暂时没遇到,但是这个问题也是大家去面试时的高频问题,有必要拿出来说一说. 大家都知道js中可以使用typeof来判断变量 ...