(php)实现批处理文件以及PHPExcel的实践
来源:互联网 发布:特别想找个女朋友知乎 编辑:程序博客网 时间:2024/06/05 02:16
利用PHPExcel进行excel插入操作。同时需要进行系统文件夹的扫描和重命名!
项目需求:网站上线要将照片上传到线上,但是有些照片的名称是中文导致上传失败,现需要将名称均改为不包含中文的名字,然后将修改前和修改后的名称的对应关系写到excel表中。
项目实现:首先实现的是对于照片名称的读取,同步实现对于照片名称的修改操作。然后将其中对应的新名称和旧名称均加入到数组中,利用phpexcel将数据写入到数组中,想法很美好,现实很残酷。折腾了一晚上,发现存在编码问题,利用函数进行字符转码后,然后才能将汉字插入到excel表中。(中间经历了很大的挫折。。。都是粗心惹的祸)
废话不多说了。上代码!
public function scan(){ $image = scandir("D:/image"); //把照片文件扫描进来。 $this->Rename("D:/image"); //echo $_SERVER['DOCUMENT_ROOT']; } //利用PHP目录和文件函数遍历用户给出目录的所有的文件和文件夹,修改照片名称 后续进行存入excel操作。 function Rename($dirname){ //原图片名数组 $oldImageName = array(); //新图片名数组 $newImageName = array(); if(!is_dir($dirname)){ //判断是否为一个有效的目录 echo "{$dirname}目录无效!"; exit(); } $handle = opendir($dirname); //打开目录,并传回一个事件句柄 while(($fn = readdir($handle))!==false){ if($fn!='.'&&$fn!='..'){ //读取dir后会有.和..目录代表本级以及上级目录。以此进行判断。 $curDir = $dirname.'/'.$fn; if(is_dir($curDir)){ //假如还为文件夹,就继续循环调用此函数。 fRename($curDir); } else{ //此为文件,直接进行改名操作。 //pathinfo() 函数以数组的形式返回文件路径的信息。 /*包括以下的数组元素: [dirname] [basename] [extension] */ $path = pathinfo($curDir); $newname = $path['dirname'].'/'.substr(microtime(),2,8).'.'.$path['extension']; //此处利用微秒函数进行重命名,以防止文件重名。 rename($curDir,$newname); array_push($oldImageName,$curDir); //将旧图片名加入数组中 array_push($newImageName,$newname); //将新图片名加入数组中 } } } //将数组信息写入excel表中。 //将数组中的元素进行处理 $num = count($oldImageName); //获取处理的图片数组的长度 for($i=0;$i<=$num;$i++){ $oldImageName[$i] = substr($oldImageName[$i],9); //去除图片名所含的路径 $newImageName[$i] = substr($newImageName[$i],9); //去除图片名所含的路径 } //dump($oldImageName); //dump($newImageName); $dir = $_SERVER['DOCUMENT_ROOT']; //找出项目的根路径 require 'D:\wamp\www\weixin\Data\PHPExcel_1.8.0_doc\Classes\PHPExcel.php'; //添加读取excel所需的类文件(PHPExcel) $objPHPExcel = new \PHPExcel(); //实例化一个PHPExcel()对象 $objSheet = $objPHPExcel->getActiveSheet(); //选取当前的sheet对象 //$objSheet->setTitle('helen'); //对当前sheet对象命名 //常规方式:利用setCellValue()填充数据 //$objSheet->setCellValue("A1","张三")->setCellValue("B1","李四"); //利用setCellValues()填充数据 //取巧模式:利用fromArray()填充数据 //更改文件名编码 for($i=0;$i<$num;$i++){ $oldImageName[$i] = mb_convert_encoding($oldImageName[$i],"UTF-8","GBK"); //此处一定要记得将转换为的字符串存下来!!! } $arr = array(); for($i=0;$i<$num;$i++){ $tmp = array("","$oldImageName[$i]","$newImageName[$i]"); array_push($arr,$tmp); } $objSheet->fromArray($arr); //利用fromArray()直接一次性填充数据 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007'); //设定写入excel的类型 $objWriter->save($dir.'/yantailogos.xlsx'); //保存文件,后面为设置excel文件名 }
折腾了一晚上,主要就是被字符编码问题困住了!!!!
得出的经验,PHPExcel插入汉字的编码应为UTF-8格式,但是在windows平台下,读取文件名获取的字符串,其编码为GBK格式。需要利用函数进行编码转换。这很重要!!!
php中编码转换函数
mb_convert_encoding( $str, $encoding1,$encoding2 ) $str,要转换编码的字符串$encoding1,目标编码,如utf-8,gbk,大小写均可$encoding2,原编码,如utf-8,gbk,大小写均可(可省略)
php中的微秒函数
microtime() 函数返回当前 Unix 时间戳和微秒数。输出两段数字 其中前一个为微秒 后一个为秒
最后对于照片读取的操作主要利用到文件的读取和扫描函数,需要细细体会,熟能生巧!
0 0
- (php)实现批处理文件以及PHPExcel的实践
- PHP利用phpExcel实现Excel数据的导入导出
- PHPExcel导出的问题,在PHP7中以及php://input与php://output
- 【php】对PHPExcel一些简单的理解
- phpExcel实现表格之间的转换
- 利用PHPExcel实现数据的导入导出
- PHPEXCEL结合MYSQL+PHP实现数据库数据导出EXCEL实例
- PHPEXCEL结合MYSQL+PHP实现数据库数据导出EXCEL实例
- PHP 使用PHPExcel实现文件导入与导出功能
- 一个简单的利用ini配置文件以及用户输入的交互进行文件夹内容拷贝的批处理文件脚本的实现
- PHPExcel使用的常用说明以及把PHPExcel整合进CI框架
- 使用批处理文件实现JDK环境变量的设置
- 转实现自己的批处理文件梦想!
- DOS批处理文件以及目录
- php PHPExcel应用
- 【php】PHPExcel要点解析
- php PHPExcel应用
- PHP与EXCEL PHPExcel
- ActiveMQ和JMS的使用
- recyclerview出现的问题
- 实时搜索引擎Elasticsearch(5)——Java API的使用
- HDU 5587 Array (规律)
- ios之自定义导航栏背景,标题和返回按钮文字颜色
- (php)实现批处理文件以及PHPExcel的实践
- 南大软院大神养成计划--第十三天网页细节处理中
- 工业4.0时代袭来
- 就Share来谈谈一些小看法
- STM32学习第五天---看了CT117E比赛版的硬件结构
- 《Android开发艺术探索》笔记之Activity的生命周期和启动模式
- HDU 1839 Delay Constrained Maximum Capacity Path(最短路+二分)
- CodeForces 161D Distance in Tree 树形DP
- 指针和数组的区别