准备工作
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();
- Yii2使用Url组件
- Yii2的Html,Request组件详解
- YII2.0框架, 多图片上传功能
- yii2-imagine配置
- 有洁癖的禁止默认YII自带垃圾代码(个人认为)、JS、CSS(新手教程)
- Yii2 API接口输出统一Json和jsonp格式方法
- MySql 创建表的一些语句释义
- Yii2联合查询(配合GridView)
- Yii 通用系统字典
- ArrayHelper的多维数组排序函数multisort,强大无比。
- 路由规则,在Url中替换使用'/'以外的符号连接
- 从excel文件中读取表格内容,并批量写入数据库
- yii2注册时验证用户名、邮箱等唯一性
- Yii2最全的实战教程
- Composer安装yii2-imagine 压缩,剪切,旋转,水印
- LinkPager增加总页数 和总记录数
- Yii2 获取模块名控制器名方法名
- Yii2使用yii2-adminlte+yii2-admin左侧菜单子路径不高亮问题又解
- 前端CSS框架
- Yii2 之 frontend 子模块实践之一:添加前后台子模块
- Yii2 之 frontend 子模块实践之二:构建子模块的独立配置
- Yii2 之 frontend 子模块实践之三:布局和语言配置
- 完美解决ajax验证码不刷新问题,让验证码更加美观,不修改任何源代码
- yii2.0 表单小部件常用的默认选中
- Yii2 controller 传值给layout
- yii2 dropDownList 二级和三级 联动写法
- 微信扫码登录 新窗口二维码 扫完关闭二维码页面 进入登录页面
- yii2 实现 "上一篇,下一篇" 功能
- Yii 行为简单应用
- SQL语句