分享给大家一个简单的数据导出excel类 [ 未指定版本 ]
<?php
/**
* 生成excel文件操作
*
* @author wesley wu
* @date 2013.12.9
*/
class Excel
{
private $limit = 10000;
public function download($data, $fileName)
{
$fileName = $this->_charset($fileName);
header("Content-Type: application/vnd.ms-excel; charset=gbk");
header("Content-Disposition: inline; filename=\"" . $fileName . ".xls\"");
echo "<?xml version=\"1.0\" encoding=\"gbk\"?>\n
<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"
xmlns:x=\"urn:schemas-microsoft-com:office:excel\"
xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"
xmlns:html=\"http://www.w3.org/TR/REC-html40\">";
echo "\n<Worksheet ss:Name=\"" . $fileName . "\">\n<Table>\n";
$guard = 0;
foreach($data as $v)
{
$guard++;
if($guard==$this->limit)
{
ob_flush();
flush();
$guard = 0;
}
echo $this->_addRow($this->_charset($v));
}
echo "</Table>\n</Worksheet>\n</Workbook>";
}
private function _addRow($row)
{
$cells = "";
foreach ($row as $k => $v)
{
$cells .= "<Cell><Data ss:Type=\"String\">" . $v . "</Data></Cell>\n";
}
return "<Row>\n" . $cells . "</Row>\n";
}
private function _charset($data)
{
if(!$data)
{
return false;
}
if(is_array($data))
{
foreach($data as $k=>$v)
{
$data[$k] = $this->_charset($v);
}
return $data;
}
return iconv('utf-8', 'gbk', $data);
}
}
//使用方法
$excel = new Excel();
$data = array(
array('姓名','标题','文章','价格','数据5','数据6','数据7'),
array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'),
array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'),
array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'),
array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'),
array('数据1','数据2','数据3','数据4','数据5','数据6','数据7')
);
$excel->download($data, '这是一个测试');
?>
word1018808441 重庆
注册时间:2015-03-24
最后登录:2018-07-04
在线时长:629小时49分
最后登录:2018-07-04
在线时长:629小时49分
- 粉丝49
- 金钱7395
- 威望40
- 积分14085
共 18 条评论
数据少的时候会被输出,需要强制下载的话,将下面的header:
header("Content-Disposition: inline; filename=\"" . $fileName . ".xls\"");
修改为:
header("Content-Disposition: attachment; filename=\"" . $fileName . ".xls\"");
即可。
如果帮到你,请点个赞呀
当条数少的时候 就被直接echo了
不知道在linux环境下是否支持呢?、
非常感谢,真的好用!
会直接被echo到页面,而不会被下载,会是什么情况呢?
控制器里面怎么使用?
特来此表达感谢~~~~
$data = array( array('姓名','标题','文章','价格','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7') );
这一部分可以用foreach重拼一下:
$tmpdata=array(); $tmpdata[0]=array('id','name','sex');//表头 $i=1; foreach($mydata as $item){ $tmpdata[$i]=array($item['id'],$item['name'],$item['sex']); $i++; } $data=$tmpdata;
是啊 怎么下载啊
怎么下载呢?
好东西,就喜欢这样的
生成的excel能直接保存到服务器上吗?
的确很好用,也很方便,求一个导出EXCEL单元格换行的方法有没有!
发现有问题,值是0的时候会输出空,还有记录少了导出也有问题
值为0,或null都会输出为空?这个怎么解决呢?
@晦涩de咚 在下载的时候直接退出,就行了
@李小贱 你好,,会直接被echo到页面,而不会被下载,会是什么情况呢?
在Mac上面出来的都是xml的格式,怎么解决呀?
不错不错!
ob_flush();
flush();
这两句什么作用 我去掉没任何影响
每当行数达到10000行的时候输出缓存区。如果去掉,那就是当输出的内容达到一定限度后(一般是4069字符)自动输出。去不去掉其实结果是一样的,只不过加上后过程更加流顺。
如果数据$data是数据库查出来的
那 array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'),
array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7'), array('数据1','数据2','数据3','数据4','数据5','数据6','数据7')
这一段怎么修改??
foreach
@iceluo 确实不错
大赞
就喜欢这种代码量少,简单的,并且能解决问题的干货。
为何不使用PHPEXCEL呢?亲
支持,支持,支持。。。。。。。。