zoukankan      html  css  js  c++  java
  • php上传excle文件,csv文件解析为二维数组

    解析上传的CSV文件不是什么难事,直接读取转成你想要的数组样子就OK了。

    public function putStoreStockIn ($filePath = '') {
        $file = fopen($filePath,'r');  
        // 每次读取CSV里面的一行内容  
        while ($csvData = fgetcsv($file)) { 
            $newDatas[] = $csvData;  
        } 
        fclose($file); 
        // 处理数据,重组数组(按业务需要)
        foreach ($newDatas as $_key => $_value) {
            $returnData[$_key]['A'] = $_value[0];
            $returnData[$_key]['B'] = $_value[1];
            $returnData[$_key]['C'] = $_value[2];
            $returnData[$_key]['D'] = $_value[3];
        }
        return $returnData;
    }
    

    PHPExcel 上传excle文件,解析时,可能会出现返回数据不正确,或为NULL的情况,这时候可能要考虑你上传的excle版本了,不同的版本在PHPExcel中药用不同的方法来读取。还有可能,你的业务场景需要对解析后的数据值进行判断时,我遇到过在windows的WPS,mac的number上,都会有默认的几行NULL值跟文件一同上传过来,而且怎么也去不掉,所以如果需要判断解析的数组值得话,可能会出错,为了避免这样的情况,在取值时过滤掉NULL值,不要它就好了。

    public function analysisexcToArray($filePath = '', $sheet = 0) {
    	 // 这个PHPExcel路径就自己看着改啦
        import('Vendor.PHPExcel.PHPExcel');
        import('Vendor.PHPExcel.PHPExcel.IOFactory.php');
        // 判断文件路径
        if(empty($filePath) or !file_exists($filePath)) {
            return FALSE;
        }
        // 建立reader对象(这里是用于适用两种excle版本的导入)
        $PHPReader = new PHPExcel_Reader_Excel2007(); 
        if(!$PHPReader->canRead($filePath)){
            $PHPReader = new PHPExcel_Reader_Excel5();
            if(!$PHPReader->canRead($filePath)){
                return FALSE;
            }
        }
        // 建立excel对象
        $PHPExcel = $PHPReader->load($filePath);  
        // 读取excel文件中的指定工作表    
        $currentSheet = $PHPExcel->getSheet($sheet);        
        // 取得最大的列数
        $allColumn = $currentSheet->getHighestColumn();        
        $allRow = $currentSheet->getHighestRow();  
        $returnData = array();
        // 整合为二维数组
        for($rowIndex = 1; $rowIndex <= $allRow; $rowIndex++){        
            for($colIndex = 'A'; $colIndex <= $allColumn; $colIndex++){
                $addr = $colIndex.$rowIndex;
                $cell = $currentSheet->getCell($addr)->getValue();
                // 富文本转换字符串
                //instanceof 作用1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。
                if($cell instanceof PHPExcel_RichText){ 
                    $cell = $cell->__toString();
                }
                // 过滤空行
                if (!is_null($cell)) {
                    $returnData[$rowIndex][] = $cell;
                }
            }
        }
        return $returnData;
    }
  • 相关阅读:
    CSS3 实现六边形Div图片展示效果
    自己编写jQuery插件 之 放大镜
    自己编写jQuery插件 之 无缝滚动
    C#装箱拆箱
    C#基础知识
    数据库锁
    SQL2008中Merge的用法
    SQl去获取相同记录
    判断DataRow中是否包含某列
    Quartz中时间表达式的设置-----corn表达式
  • 原文地址:https://www.cnblogs.com/maomojun/p/7343100.html
Copyright © 2011-2022 走看看