使用PHPExcel进行判断excel的类型并导入Demo
- 6494
- PHP
- 33
- super_dodo
- 2017/04/18
最近遇到一个小功能,需要对远程的Excel进行读取并执行任务导入到数据库里面。这个时候就需要判断Excel是2003还是2007版本了。虽然大多数都可以根据文件名进行判断,但是PHPExcel提供了更加完善的方法。PHPExcel_IOFactory::identify($excelFile); //'Excel5' 'Excel2007'得到的excel的地址。
读取远程文件到本地可以直接使用ile_put_contents($excelFile,file_get_contents($file_url)); //下载到本地,亦可wget方式
//使用Excel批量导入数据 file_url 是远程阿里云Oss上面的
public static function importByExcel($file_url){
//file_url是远程的文件地址,需要先抓取下来才能读取
// $file_url = 'http://****-hangzhou.aliyuncs.com/uploader/14493_xlsx.xlsx';
//远程读取数据
$excelPath = Yii::$app->basePath.'/runtime/'; //本地临时目录
$excelFile = $excelPath.'.xlsx'; //TODO 兼容更多的格式
file_put_contents($excelFile,file_get_contents($file_url)); //下载到本地 wget
$excelType = \PHPExcel_IOFactory::identify($excelFile); //'Excel5' 'Excel2007'
$phpExcel = new \PHPExcel;
$excelReader = \PHPExcel_IOFactory::createReader($excelType);
$phpExcel = $excelReader->load($excelFile)->getSheet(0);//载入文件并获取第一个sheet
$total_line = $phpExcel->getHighestRow(); //多少行
$total_column = $phpExcel->getHighestColumn(); //多少列
$map = ['name','url','desc'];
$total_count = 0; //总的数目
$fail_count = 0; //失败的数目
$fail_reason = [];
for($row = 5; $row <= $total_line; $row++) {
$item = array();
for($column = 'A'; $column <= 'C'; $column++) {
$item[] = trim($phpExcel->getCell($column.$row)->getValue());
}
if($item[0]){ //有产品名字即可
$total_count += 1;
//TODO 批量添加
$mapItem = array_combine($map, $item); //map为key item为值 合并两个数组
$model = new Product();
$model->name = $mapItem['name'];
$model->url = $mapItem['url'];
$model->desc = $mapItem['desc'];
$model->remark = 'Excel导入';
if(!$model->save()){
$fail_count += 1;
$fail_reason[] = ['row'=>$row,'name'=>$mapItem['name'],'msg'=>$model->getFirstErrorMessage()]; //错误的行记录下来
continue;
}
}
}
//处理完之后删除临时的excel本地文件
unlink($excelFile);
return 1;
}
你不快乐是因为你可以像猪一样懒,却无法像猪一样懒得心安理得。
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例

