YII2框架中excel表格导出的方法详解
这时老板说了,我们不能只看总和的数据,最好是把具体数据也给导出来。既然老板发话了,那就做吧。照旧凭证第一种的要领去做,功效提醒我php瓦解了,再试一次发明提醒写入字节超出。打开php的设置文件php.ini 发明默认内存已经给到128M,应该是足够的了。于是我打开数据库一看,嚯! 靠近83万条的数据举办查询并导出,可不是会出题目嘛!怎么办呢,于是我Google了一下,发明对付大数据(2万条以上)的导出,最好是以.csv的情势。不说空话,直接上代码 1.controller文件public function actionInventory(){ini_set("memory_limit","2048M"); set_time_limit(0); $id = Yii::$app->user->identity->getId(); $user = Employee::find()->where(['id'=>$id])->one(); $params = Yii::$app->request->get(); //相同的,跳转到recharge这个model文件里的inventory要领行止理赏罚数据 //配置导出的文件名 //配置表头 //指明导出的名目 //打开PHP文件句柄,php://output 暗示直接输出到赏识器 //输出Excel列名信息 //将数据通过fputcsv写到文件句柄 //每隔$limit行,革新一下输出buffer,不要太大,也不要太小 //逐行取出数据,不挥霍内存 2.model文件(由于这部门我要处理赏罚的过多,以是只选择了部门代码),在查询数据那部门,由于要查的数据较多,以是可以团结我之前写的关于Mysql大数据查询处理赏罚的文章看一下//清单导出 asArray()->all();
$where2 = '';
$where2 .= ' AND (`issue_date` BETWEEN '.'''.$date_min.'''.' AND '.'''.$date_max.'')';
$where2 .= ' AND (`back_date` > ''.$date_max.'')';
$map2 = 'select
company.name,media.is_advance
from article
LEFT JOIN custom_package ON custom_package.id = article.custom_package_id
LEFT JOIN `order` ON custom_package.order_id = `order`.`id`
LEFT JOIN company ON company.id = article.company_id
LEFT JOIN media ON media.id = article.media_id
where article.status=3 and `order`.package=0 '.$where2;
//查找的第二部门数据
$list2 = Article::findBySql($map2)->asArray()->all();
$where3 = '';
$where3 .= ' AND (`issue_date` BETWEEN '.'''.$date_min.'''.' AND '.'''.$date_max.'')';
$map3 = 'select
company.name,media.is_advance
from article
LEFT JOIN custom_package ON custom_package.id = article.custom_package_id
LEFT JOIN `order` ON custom_package.order_id = `order`.`id`
LEFT JOIN company ON company.id = article.company_id
LEFT JOIN media ON media.id = article.media_id
where article.status=5 '.$where3;
//查找的第三部门数据
$list3 = Article::findBySql($map3)->asArray()->all();
$list4 = ArrayHelper::merge($list1,$list2);
$list = ArrayHelper::merge($list4,$list3);
}
//把功效凭证表现次序存到返回的数组中
if(!empty($list)){
foreach ($list as $key => $value){
//署理公司
$inventory[$key]['company_name'] = $value['name'];
//文章ID
$inventory[$key]['id'] = $value['id'];
//文章问题
$inventory[$key]['title'] = $value['title'];
//媒体
$inventory[$key]['media'] = $value['media_name'];
//统计时刻
$inventory[$key]['time'] = $time;
//状态
switch($value['status']){
case 2:
$inventory[$key]['status'] = '已宣布';
break;
case 3:
$inventory[$key]['status'] = '已退稿';
break;
case 5:
$inventory[$key]['status'] = '非常稿件';
break;
}
//建设时刻
$inventory[$key]['created'] = $value['created'];
//考核时刻
$inventory[$key]['audit'] = $value['audit_at'];
//发稿时刻
$inventory[$key]['issue_date'] = $value['issue_date'];
//退稿时刻
$inventory[$key]['back_date'] = $value['back_date'];
//财政状态
switch($value['finance_status']){
case 0:
$inventory[$key]['finance_status'] = '未到结算期';
break;
case 1:
$inventory[$key]['finance_status'] = '可结算';
break;
case 2:
$inventory[$key]['finance_status'] = '资源审批中';
break;
case 3:
$inventory[$key]['finance_status'] = '财政审批中';
break;
case 4:
$inventory[$key]['finance_status'] = '已结款';
break;
case 5:
$inventory[$key]['finance_status'] = '未通过';
break;
case 6:
$inventory[$key]['finance_status'] = '财政已审批';
break;
}
//本钱
$inventory[$key]['cost'] = $value['cost'];
//贩卖额
$inventory[$key]['company_cost'] = $value['company_cost'];
//是否是预售
switch($value['is_advance']){
case 0:
$inventory[$key]['is_advance'] = '否';
break;
case 1:
$inventory[$key]['is_advance'] = '是';
break;
case 2:
$inventory[$key]['is_advance'] = '条约';
break;
}
//订单种别
switch($params['state']){
case 1:
$inventory[$key]['order_type'] = '时刻区间无退稿完成订单';
break;
case 2:
$inventory[$key]['order_type'] = '时刻区间宣布前退稿订单';
break;
case 3:
$inventory[$key]['order_type'] = '时刻区间宣布后时刻区间退稿订单';
break;
case 4:
$inventory[$key]['order_type'] = '时刻区间之前宣布时刻区间内退稿订单';
break;
case 5:
$inventory[$key]['order_type'] = '非常订单';
break;
}
}
}else{
$inventory[0]['company_name'] = '无数据导出';
}
return $inventory;
} (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |