PHPExcel+phalcon+yii批量导入
网上好多资料,但运行起来,总是有问题,这次好保存下来。
phalcon下:
第一步:在index.php里面添加
include __DIR__ . "/../app/extensions/phpexcel/PHPExcel.php";
第二步:实例function
/*
* 批量导入用户
*/
public function batchImportUsersAction()
{
$filePath = dirname(__FILE__).'/../data/users.xls';
$PHPReader = new PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($filePath)){
$PHPReader = new PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($filePath)){
echo 'no Excel';
exit;
}
}else{
echo 'can read';exit;
}
$PHPExcel = $PHPReader->load($filePath);
// echo is_object($PHPExcel).'mmm';exit; //查看是否初始化成功
$currentSheet = $PHPExcel->getSheet(0); //读取excel文件中的第一个工作表
$allColumn = $currentSheet->getHighestColumn();//取得所有列
$allRow = $currentSheet->getHighestRow();//取得一共有多少行
// $choose_row = $allRow; //遍历所有行
$choose_row = 205;
for($currentRow = 177;$currentRow <= $choose_row;$currentRow++){ //遍历所有行或指定行,177是excel的行号
for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){ //从第A列开始输出
$val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/
// if($currentColumn == 'B'){
// echo iconv('gb2312','utf-8', $val);// 转成utf-8格式
// }
// echo $val;
echo $val;
}
echo '<br/>';
//插入表
// $use = new Users();
// $use->employee_id = $currentSheet->getCellByColumnAndRow(ord('A') - 65,$currentRow)->getValue();
// $use->user_name = $currentSheet->getCellByColumnAndRow(ord('B') - 65,$currentRow)->getValue();
// $use->email = $currentSheet->getCellByColumnAndRow(ord('D') - 65,$currentRow)->getValue();
// $use->password = 22;
// $use->role = 1;
// $use->depart_id = 1;
// $use->status = 1;
// $use->position = 1;
// $use->update_time = time();
// $use->record_time = time();
//
// if($use->save() == false){
// echo $currentRow.'行出错';
// }
}
}
补充:yii下 开发,在command里用cron定时跑时,时常会出现问题,比如:
include(PHPExcel_Shared_String.php): failed to open stream: No such file or directory in file /data1/www/local/jiaban/yii/framework/YiiBase.php at line 435
#0 /data1/www/local/jiaban/yii/framework/YiiBase.php(435): autoload()
#1 unknown(0): autoload()
上面的报错,是典型的autoload 自动加载冲突。 因为在Yii中用spl_autoload_register(array('YiiBase','autoload')) 定义过一个,而phpexcel或者phpmailer里也定义了各自的autoload函数。
这时,如果系统自动用yii的autoload去加载phpexcel或者phpmailer的类时,会出现类名的问题。比如phpexcel下 PHPExcel_Shared_String.class.php,是多拼接一个class的。
最好的方法,入口脚本处,导入phpexcel和phpmailer 的入口文件。
Yii 项目中 修改index.php
Yii commands中,修改 protected/yiic.php
phalcon 和 task中,修改 index.php
然后:还要在配置文件里面导入哦,比如Yii command的配置文件,console.php中,要加入 import 'application.extensions.*',
2、解构技能,找出实现80%效果的那20%
3、不要一心二用
4、练习练习再练习!然后获得即时反馈
5、坚持,不要在低谷期放弃