今天要处理两个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); } ?>