Yii 2.0 PHPExcel 导入导出简单方便 [ 2.0 版本 ]
导出Excel表格
public function actionUpexcel()
{
$objPHPExcel = new \PHPExcel();
//设置文件的一些属性,在xls文件——>属性——>详细信息里可以看到这些值,xml表格里是没有这些值的
$objPHPExcel
->getProperties() //获得文件属性对象,给下文提供设置资源
->setCreator( "MaartenBalliauw") //设置文件的创建者
->setLastModifiedBy( "MaartenBalliauw") //设置最后修改者
->setTitle( "Office2007 XLSX Test Document" ) //设置标题
->setSubject( "Office2007 XLSX Test Document" ) //设置主题
->setDescription( "Test document for Office2007 XLSX, generated using PHP classes.") //设置备注
->setKeywords( "office 2007 openxmlphp") //设置标记
->setCategory( "Test resultfile"); //设置类别
// 位置aaa *为下文代码位置提供锚
//给表格添加数据
$data=\common\models\SchoolRule::find()->all();//数据库取出数据
/*echo "<pre>";
var_dump($data);
echo "</pre>";
exit();*/
$objPHPExcel->setActiveSheetIndex(0)//表头的信息
->setCellValue('A1', "编号")
->setCellValue('B1', "所属上级")
->setCellValue('C1', "路由名称")
->setCellValue('D1', "菜单标题")
->setCellValue('E1', "状态");
$i=2;
foreach ($data as $key => $value) {
$objPHPExcel->getActiveSheet() // 设置第一个内置表(一个xls文件里可以有多个表)为活动的
->setCellValue( 'A'.$i, $value['id'] ) //给表的单元格设置数据
->setCellValue( 'B'.$i, $value['pid'] ) //数据格式可以为字符串
->setCellValue( 'C'.$i, $value['route']) //数字型
->setCellValue( 'D'.$i, $value['title'] ) //
->setCellValue( 'E'.$i, $value['condition'] ) //布尔型
->setCellValue( 'F'.$i, $value['status'] );
$i++;
}
//公式
//得到当前活动的表,注意下文教程中会经常用到$objActSheet
$objActSheet =$objPHPExcel->getActiveSheet();
// 位置bbb *为下文代码位置提供锚
//给当前活动的表设置名称
$objActSheet->setTitle('Simple2222');
//代码还没有结束,可以复制下面的代码来决定我们将要做什么
//我们将要做的是
//1,直接生成一个文件
$objWriter =\PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('myexchel.xlsx');
header('Content-Type:application/vnd.ms-excel');
header('Content-Disposition:attachment;filename="01simple.xls"');
header('Cache-Control:max-age=0');
$objWriter =\PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
return $this->render($this->actionID);
}
导出效果
Excle导入
public function actionUpload()//excel导入
{
$model = new \common\models\Excel();
$ok = "";
if ($model->load(Yii::$app->request->post())) {
$file = UploadedFile::getInstance($model, 'icon'); //获取上传的文件实例
if ($file) {
$filename = 'uploads/'.date('Y-m-d',time()).'_'.rand(1,9999).".". $file->extension;
$file->saveAs($filename); //保存文件
/*exit;
$format = $file->extension;*/
if(in_array($file->extension,array('xls','xlsx'))){
/*$excelFile = Yii::getAlias('@web/www/uploads'.$filename.'');*///获取文件名
$fileType = \PHPExcel_IOFactory::identify($filename); //文件名自动判断文件类型
$excelReader = \PHPExcel_IOFactory::createReader($fileType);
$phpexcel = $excelReader->load($filename)->getSheet(0);//载入文件并获取第一个sheet
$total_line = $phpexcel->getHighestRow();//总行数
$total_column= $phpexcel->getHighestColumn();//总列数
if($total_line > 1){
for($row = 2;$row <= $total_line; $row++){
$data = array();
for($column = 'A'; $column <= $total_column; $column++){
$data[] = trim($phpexcel->getCell($column.$row)->getValue());
}
//一行行的插入数据库操作
$info=Yii::$app->db->createCommand()->insert('school_rule', [
'pid' => $data['1'],
'route' => $data['2'],
'title' => $data['3'],
'condition' => $data['4'],
'status' => $data['5'],
])->execute();
if ($info) {
$ok = 1;
}
}
/*exit(); */
}
if ($ok == 1){
$this->redirect(array('index'));
} else{
echo "<script>alert('操作失败');window.history.back();</script>";
}
}
}
}else{
return $this->render($this->actionID,[
'model'=>$model
]);
}
}
导入效果
欢迎大家参考学习,相互学习
有什么问题可以 加QQ:602643358 记得备注一下。谢谢!
HuangFeiLong
注册时间:2018-01-09
最后登录:2020-02-12
在线时长:8小时27分
最后登录:2020-02-12
在线时长:8小时27分
- 粉丝3
- 金钱20
- 威望10
- 积分200
共 6 条评论
批量导入比较好
官方写着phpexcel已经并入PhpSpreadsheet项目,不再更新,楼主可以发个PhpSpreadsheet教程吗?
这个PhpSpreadsheet我没有了解过
好东西,但是实战时导出还是得分次导出合理些,如果数据量多的话。
$model = new \common\models\Excel(); 能不能看一下这个文件
怎么没头没尾的?
chrome 下无反应