zoukankan      html  css  js  c++  java
  • PHP处理数据--excel与scv与json

    今天要处理两个excel。两个循环嵌套验证重复性。所以写了几个函数来处理20亿次的数据量。

    一。把excel读出来,保存为json。利用phpexcel插件:

    <?php
    
    header("Content-Type:text/html;charset=utf-8");
    $dir=dirname(__FILE__);//找到当前脚本所在路径
    require $dir."/PHPExcel/PHPExcel/IOFactory.php";//引入读取excel的类文件
    $filename=$dir."/o.xls";
    $fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
    $objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象
    $sheetName=array("Sheet1");
    $objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
    $objPHPExcel=$objReader->load($filename);//加载文件
    /**$sheetCount=$objPHPExcel->getSheetCount();//获取excel文件里有多少个sheet
    for($i=0;$i<$sheetCount;$i++){
        $data=$objPHPExcel->getSheet($i)->toArray();//读取每个sheet里的数据 全部放入到数组中
        print_r($data);
    }**/
    $i=0;
    foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
            foreach($sheet->getRowIterator() as $row){//逐行处理
                    if($row->getRowIndex()<2){
                        continue;
                    }
                    $da = array();
                    foreach($row->getCellIterator() as $cell){//逐列读取
                            $data=$cell->getValue();//获取单元格数据
                            $da[] =  $data;
    
                    }
                    $d[] = $da;
    
    
            }
            
    }
    
    $dd =json_encode($d);
    touch('o.html');
    file_put_contents('o.html', $dd);
    echo  "成功";

    二、把弄好的数组,在保存为execl。但是直接操作excel,会比较慢,所保存为csv

    <?php 
    $filenamew ="dd.html";//读取出来的json
    $json_sw = file_get_contents($filenamew);
    $data = json_decode($json_sw);
    $filename = "33"; //保存的文件名
      
    header("Content-type: text/csv"); 
    header("Content-Disposition: attachment; filename={$filename}.csv"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
      
    outputCSV($data); 
      
    function outputCSV($data) { 
            $outputBuffer = fopen("php://output", 'w'); 
            foreach($data as $val) { 
            foreach ($val as $key => $val2) { 
             $val[$key] = iconv('utf-8', 'gbk', $val2);// CSV的Excel支持GBK编码,一定要转换,否则乱码 
             } 
                fputcsv($outputBuffer, $val); 
            } 
            fclose($outputBuffer); 
        } 
      
    ?>
  • 相关阅读:
    Linq 实例
    VS的无用文件
    我在vs文本编辑中常用的快捷键----常更新
    EF+MVC学习中的不理解的问题
    Lambda表达式
    Linq学习(主要参考linq之路)----2LINQ方法语法
    WPF编译时提示“...不包含适合于入口点的静态‘Main’方法 ...”
    SQL
    SQL Server
    sql 判断表是否存在
  • 原文地址:https://www.cnblogs.com/chenjinxinlove/p/5358469.html
Copyright © 2011-2022 走看看