上一篇写到了数据导出EXCEL,同样的有时候需要进行EXCEL数据导入数据库,此处同样适用的是PHPEXCEL包,具体的方法如下:
/**
* @todo import excel to mysql
* @param $filepath 存储路径
* @param $file 原始的文件名
* @param $filetemp 文件临时存储路径
* @param $sqls insert语句部分
* @return boolean false/true
* @see 例子:
* if (isset($_POST['submit'])){
$files=$_FILES['excelfile'];
$file=$files['name'];
$filetemp=$files['tmp_name'];
$filepath='upload/';
$sql='INSERT INTO user (`userid`, `username`, `userage`) VALUES (';
$importExcel = $this-> importExcel($filepath, $file, $filetemp, $sql);
if ($importExcel==TRUE){
echo 'true';
}else{
echo 'false';
}
}
*/
public function importExcel($filepath,$file,$filetemp,$sqls){
//PHPEXCEL包路径
$phpExcelPath=Yii::app() -> request -> baseUrl.'/protected/extensions/phpexcel/';
spl_autoload_unregister(array('YiiBase','autoload'));//取消YII自动加载
include($phpExcelPath . 'PHPExcel.php');//引入PHPEXCEL类
//实现文件上传
$filename=explode('.', $file);
$time=time();
$filename[0]=time();
$filename=implode('.', $filename);
$uploadfile=$filepath.$filename;
$uploadResult=move_uploaded_file($filetemp, $uploadfile);
//根据文件上传状态进行具体操作
error_reporting(E_ALL ^ E_NOTICE);
if ($uploadResult==TRUE){
//初始化EXCEL导入
$excelReader = PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $excelReader -> load($uploadfile);//获取需要导入文件
$objWorksheet = $objPHPExcel -> getActiveSheet();
$highestRow = $objWorksheet -> getHighestRow(); //计算行数
$highestColumn = $objWorksheet->getHighestColumn();//计算列数
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//初始化列数索引总数
//读取EXCEL数据文件
for ($row = 2; $row <= $highestRow; $row++){
//获取一行中每列的数据
for ($col = 0 ; $col <$highestColumnIndex; $col++ ){
$list[$col] = "'". $objWorksheet -> getCellByColumnAndRow($col, $row) -> getValue() ."'";
}
$sqlStr = join(',', $list);
$sqlAll[]= $sqls.$sqlStr.');';
}
//执行SQL操作
include 'BaseModel.php';
$db = new BaseModel();
$doImport = $db -> doArraySqlActionsTran($sqlAll);//使用事务进行批量导入
if ($doImport==TRUE){
@unlink($uploadfile);//导入成功后删除上传文件
return TRUE;
}else{
return FALSE;
}
}else {
return FALSE;
}
Yii::app()->end();
//恢复Yii自动加载功能
spl_autoload_register(array('YiiBase','autoload'));
}
该方法中没有进行数据格式的转换,大家可以根据自己的情况进行转换。