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