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); 
    } 
  
?>
原文地址:https://www.cnblogs.com/chenjinxinlove/p/5358469.html