数据导出execl 或csv文件 [ 未指定版本 ]
class DownLoadExcel
{
private $limit = 10000;
public function download($data, $fileName)
{
$fileType = explode('.',$fileName)[1];
$fileName = $this->_charset($fileName);
if( $fileType == 'xls' || $fileType == 'xlsx')
{
header("Content-Type: application/vnd.ms-excel; charset=GB2312");
header("Content-Disposition: attachment; filename=\"" . $fileName. "\"");
$str = '';
foreach ($data as $row) {
$str_arr = array();
foreach ($row as $column) {
$str_arr[] = '"' . str_replace('"', '""', $column) . '"';
}
$str.=implode(chr(9), $str_arr) . PHP_EOL;
}
echo $this->_charset($str);
}else if($fileType == 'csv')
{
header("Content-Type: application/vnd.ms-excel; charset=GB2312");
header("Content-Disposition: attachment;filename=".$fileName);
$str = '';
foreach ($data as $row) {
$str_arr = array();
foreach ($row as $column) {
$str_arr[] = '"' . str_replace('"', '""', $column) . '"';
}
$str.=implode(',', $str_arr) . PHP_EOL;
}
echo $this->_charset($str);
}else
{
exit("Not supported".$fileType);
}
}
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', 'GB2312', $data);//utf-8转化为gbk
}
}
//使用例子:
$data = array(
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')
);
$execl = new DownLoadExcel();
$execl->download($data,'test.xls');
晦涩de咚
注册时间:2015-08-03
最后登录:2020-09-04
在线时长:356小时20分
最后登录:2020-09-04
在线时长:356小时20分
- 粉丝36
- 金钱13598
- 威望340
- 积分20558
共 9 条评论
不好意思,新人~能教一下怎样使用吗?
下面不是有使用例子吗,只需要传一个如例子中的$data数组和文件名与其后缀。
我直接使用例子,在页面有显示~但是没有下载成excel文件
@冰丨wayne 倪代马怎么写的?这写代码放在一个页面吗?你有看运行的时候报错没?
@冰丨wayne test
@晦涩de咚收到
代码添加“namespace common\extensions;”,保存,然后将class文件
DownLoadExcel.php
放在common\extensions
下,在一个控制文件里添加如下action,然后访问即可
public function actionReadexcel() { $data = array( 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') ); $execl = new \common\extensions\DownLoadExcel(); $execl->download($data,'test.xls'); }
yii 2,你应该在控制器里面 $execl = new DownLoadExcel(); 应该会自动加上use common\extensions吧。这样好看些吧。
赞。。。。。。。。。。
格式变成啥样了? 好像这个不能用正版的office打开,用wps可以。
@晦涩de咚 丢到服务器上就不对了 然后我用phpExcel写的
可以可以,亲测可行
大哥,有word吗
兄弟,你不妨试一试 http://demos.krajee.com/grid#grid-export ;个人觉得这个结合的比较好
@晦涩de咚 这能整出word?
@luanzhiyong 不能,但是能够pdf等;:(html, csv, txt, xls, pdf, json).
@晦涩de咚 大哥,知不知道phpword咋在yii2中使
DownLoadExcel 类文件 放在哪个目录里
根据个人开发习惯,可以学习上面这个评论的方法:
heenji heenji 评论于 2016-01-21 11:03
如何自定义增加 导出内容的每列标题呢
$data是可以自定义重组的,你处理下,不就ok
楼主修改下
download
,导出数据量过大会溢出问题的解决public function download($data, $fileName) { $fileType = explode('.',$fileName)[1]; $fileName = $this->_charset($fileName); if( $fileType == 'xls' || $fileType == 'xlsx') { header("Content-Type: application/vnd.ms-excel; charset=GB2312"); header("Content-Disposition: attachment; filename=\"" . $fileName. "\""); $str = ''; $guard = 0; foreach ($data as $row) { $guard++; if($guard==$this->limit) { ob_flush(); flush(); $guard = 0; } $str_arr = array(); foreach ($row as $column) { $str_arr[] = '"' . str_replace('"', '""', $column) . '"'; } $str.=$this->_charset(implode(chr(9), $str_arr) . PHP_EOL); } echo $str; }else if($fileType == 'csv') { header("Content-Type: application/vnd.ms-excel; charset=GB2312"); header("Content-Disposition: attachment;filename=".$fileName); $str = ''; $guard = 0; foreach ($data as $row) { $guard++; if($guard==$this->limit) { ob_flush(); flush(); $guard = 0; } $str_arr = array(); foreach ($row as $column) { $str_arr[] = '"' . str_replace('"', '""', $column) . '"'; } $str.=$this->_charset(implode(',', $str_arr) . PHP_EOL); } echo $str; }else { exit("Not supported".$fileType); }