多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
准备工作 1、excel表文件名为test20170919.xls,存放于当前项目目录下的.\upload\excel文件夹中; 2、利用PHPExcel组件读取excel表文件内容。 PS:PHPExcel组件使用详细内容可参考《Yii2-手动安装、引用第三方插件PHPExcel实例详解,Excel导出》,http://www.yiichina.com/topic/7142 3、写入的数据库表名为country。 PS:一次性添加多条数据至数据库详细说明可参考《使用createCommand()函数向数据库添加1条或多条数据》,http://www.yiichina.com/topic/7253 实例代码如下: <?php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\Country; use PHPExcel; class ImportController extends Controller { public function actionImport() { $basePath=Yii::$app->basePath; $file_url=$basePath.'\upload\excel\test20170919.xls'; $filename=$file_url; $objPHPExcelnew=new PHPExcel(); $objReader= \PHPExcel_IOFactory::createReader('Excel5'); $objPHPExcel=$objReader->load($filename); $sheet=$objPHPExcel->getActiveSheet(); $highestRow=$sheet->getHighestRow(); $highestColumn=$sheet->getHighestColumn(); $highestColumnIndex=\PHPExcel_Cell::columnIndexFromString($highestColumn); $excelData=array(); for($row=2;$row<=$highestRow;$row++) { for($col=0;$col<$highestColumnIndex;$col++) { $excelData[$row][]=(string)$sheet->getCellByColumnAndRow($col,$row)->getValue(); } } Yii::$app->db->createCommand()->batchInsert('country', ['code', 'name','population'],$excelData)->execute(); echo 'insert success.'; } } wwwwwwwwww # #### # Yii2-手动安装、引用第三方插件PHPExcel实例详解,Excel导出 0、下载PHPExcel 下载phpexcel地址:https://github.com/PHPOffice/PHPExcel/archive/1.8.1.zip 下载完成后,解压PHPExcel-1.8.1.zip文件,进入Classes文件夹目录,复制里面的子文件及子文件夹内容(即类文件)。 ![](https://box.kancloud.cn/0251d03b9a4d6f9a6b6c2ea4f2863213_1101x640.jpg) 1、将PHPExcel类文件夹放入libs 在yii2根目录下,新建libs文件夹,并将下载好的PHPExcel类文件夹放入libs文件夹下 1-1.png 1-2.png 2、配置web.php,加入PHPExcel.php类 在D:\wamp\Apache2.2\htdocs\myyii2\config文件夹下,打开web.php文件 添加如下代码: Yii::$classMap['PHPExcel']='@app/libs/PHPExcel.php'; 2-1.png 2-2.png 3、创建PHPExcel导出控制器 在D:\wamp\Apache2.2\htdocs\myyii2\controllers文件夹下创建ExportController.php控制器文件。 3-1.png 添加以下代码: <?php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\Country; use PHPExcel; class ExportController extends Controller { public function actionExport(){ $data=Country::find()->asArray()->all(); if(!$data){ return $this->redirect(['Country/index']); }else{ $objPHPExcel=new PHPExcel(); $objPHPExcel->getProperties()->setCreator("zhangsan") ->setLastModifiedBy("lisi") ->setTitle("my title") ->setSubject("my subject") ->setDescription("my description") ->setKeywords("my keywords") ->setCategory("my category"); // 设置列宽 $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20); // 设置表头 $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', '代码') ->setCellValue('B1', '国家') ->setCellValue('C1', '地区'); $n=2; // 设置内容 foreach($data as $v){ $objPHPExcel->getActiveSheet()->setCellValue('A'.$n,$v['code']); $objPHPExcel->getActiveSheet()->setCellValue('B'.$n,$v['name']); $objPHPExcel->getActiveSheet()->setCellValue('C'.$n,$v['population']); $n=$n+1; } // 重命名 $objPHPExcel->getActiveSheet()->setTitle('test-sheet'); $objPHPExcel->setActiveSheetIndex(0); // 输出 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="test.xls"'); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //注意,要加“\”,否则会报错 $objWriter->save('php://output'); } } } 4、执行控制器中的export动作 在浏览器中输入网址:http://localhost/myyii2/web/index.php?r=export/export,回车执行excel导出动作。 4-1.png 双击打开excel文件核对excel内容是否与代码设定的内容一致 4-2.png 右键test.xls文件,点击属性-->详细信息,发现属性设置与代码中设置的表格属性一致。 4-3.png # 使用createCommand()函数向数据库添加1条或多条数据 使用createCommand()函数向数据库添加数据 添加1条数据 Yii::$app->db->createCommand()->insert(表名, ['字段1'=>'字段1内容', '字段2'=>'字段2内容','字段3'=>'字段3内容'])->execute(); public function actionAddOne() { Yii::$app->db->createCommand()->insert('country',['code'=>'A1','name'=>'A111111','population'=>'123456789'])->execute(); } 添加多条数据 Yii::$app->db->createCommand()->batchInsert(表名, ['字段1', '字段2','字段3'], [['字段1内容', '字段2内容','字段3内容'], ['字段1内容', '字段2内容','字段3内容'], ['字段1内容', '字段2内容','字段3内容'], ])->execute(); public function actionAddAll() { Yii::$app->db->createCommand()->batchInsert('country', ['code', 'name','population'], [ ['AA', 'Aaaaaa','123456789'], ['BB', 'Bbbbbb','123456789'], ['CC', 'Cccccc','123456789'], ])->execute(); } //[删除]数据 public function actionDeleteOne() { Yii::$app->db->createCommand()->delete('country',['code'=>'A1'])->execute(); } //[修改]数据 public function actionUpdateOne() { Yii::$app->db->createCommand()->update('country',['name'=>'A16666','population'=>'233456'],['code'=>'A1'])->execute(); } 更多补充 //获取自增ID $id=Yii::$app->db->getLastInsertID(); //[查询]数据 // 查询返回多行: $command = Yii::$app->db->createCommand('SELECT * FROM post'); $posts = $command->queryAll(); // 返回单行 $command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1'); $post = $command->queryOne(); // 查询多行单值: $command = Yii::$app->db->createCommand('SELECT title FROM post'); $titles = $command->queryColumn(); // 查询标量值/计算值: $command = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post'); $postCount = $command->queryScalar();