이 글은 주로 PHP로 대용량 엑셀 파일 데이터를 읽는 방법을 소개합니다. 이제 참고할 만한 가치가 있어서 공유합니다. 도움이 필요한 친구들이 참고할 수 있도록
예전 동창이 와서 회사의 물류 업무를 이제 엑셀로 처리한다고 하더군요. 매달 데이터가 너무 많아서 엑셀 하나에 거의 100만 개에 달하는 데이터가 있고, 파일 크기도 100M에 가깝다고 하더군요. 검색이 꽤 느립니다예를 들어보세요. 데이터를 가져오려면 Excel 데이터의 양이 매우 클 수 있습니다. phpexcel과 같이 일반적으로 사용되는 방법에는 시간과 메모리 제한이 있는 경우가 많습니다. 이제 스트림을 사용하는 클래스 라이브러리인 SpreadsheetReader를 사용하겠습니다.
작성 과정지침
<?php /** * Created by PhpStorm. * User: qkl * Date: 2018/7/11 * Time: 15:14 */ set_time_limit(0); // 设置脚本最大执行时间 为0 永不过期 //ini_set('memory_limit','200M'); // 临时设置最大内存占用 function convert($size) { $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb'); return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i]; } require '../vendor/autoload.php'; $start = memory_get_usage(); echo convert($start) . PHP_EOL; //$inputFileName = './11111111.xlsx'; $inputFileName = './example1.xlsx'; // If you need to parse XLS files, include php-excel-reader $startTime = microtime(true); $Reader = new SpreadsheetReader($inputFileName); //获取当前文件所有的工作表 $sheets = $Reader->Sheets(); if (!$sheets) { die("没有工作表"); } //改变当前处理的工作表 $Reader->ChangeSheet(0); //打印当前所在工作表的当前所在行数据 var_dump($Reader->current()); //因为reader类集成了Iter所以可以用迭代方式处理 //这里提醒 如果文件超大,这边的处理速度会过慢,不过不会引发内存性能问题 //$i = 0; //foreach ($Reader as $Row) //{ // if ($i>=3) { // break; // } // // echo $i . PHP_EOL; // print_r($Row); // // $i++; //} $endTime = microtime(true); $memoryUse = memory_get_usage(); echo "内存占用:" . convert($memoryUse) . "; 用时:" . ($endTime - $startTime) . PHP_EOL;
Results
147.77 kb array (size=50) 0 => string 'xxxxxxxxxxxxxx' (length=25) 1 => string 'xxxxxxxxxxxxxx' (length=15) 2 => string 'xxxxxxxxxxxxxx' (length=18) 3 => string 'xxxxxxxxxxxxxx' (length=12) 4 => string 'xxxxxxxxxxxxxx' (length=12) 5 => string 'xxxxxxxxxxxxxx' (length=12) 6 => string 'xxxxxxxxxxxxxx' (length=24) 7 => string 'xxxxxxxxxxxxxx' (length=12) 8 => string 'xxxxxxxxxxxxxx' (length=27) 9 => string 'xxxxxxxxxxxxxx' (length=12) 10 => string 'xxxxxxxxxxxxxx' (length=15) 11 => string 'xxxxxxxxxxxxxx' (length=28) 12 => string 'xxxxxxxxxxxxxx' (length=9) 13 => string 'xxxxxxxxxxxxxx' (length=12) 14 => string 'xxxxxxxxxxxxxx' (length=9) 15 => string 'xxxxxxxxxxxxxx' (length=6) 16 => string 'xxxxxxxxxxxxxx' (length=9) 17 => string 'xxxxxxxxxxxxxx' (length=3) 18 => string 'xxxxxxxxxxxxxx' (length=6) 19 => string 'xxxxxxxxxxxxxx' (length=3) 20 => string 'xxxxxxxxxxxxxx' (length=15) 21 => string 'xxxxxxxxxxxxxx' (length=15) 22 => string 'xxxxxxxxxxxxxx' (length=19) 23 => string 'xxxxxxxxxxxxxx' (length=13) 24 => string 'xxxxxxxxxxxxxx' (length=19) 25 => string 'xxxxxxxxxxxxxx' (length=12) 26 => string 'xxxxxxxxxxxxxx' (length=12) 27 => string 'xxxxxxxxxxxxxx' (length=12) 28 => string 'xxxxxxxxxxxxxx' (length=6) 29 => string 'xxxxxxxxxxxxxx' (length=12) 30 => string 'xxxxxxxxxxxxxx' (length=6) 31 => string 'xxxxxxxxxxxxxx' (length=15) 32 => string 'xxxxxxxxxxxxxx' (length=24) 33 => string 'xxxxxxxxxxxxxx' (length=18) 34 => string 'xxxxxxxxxxxxxx' (length=18) 35 => string 'xxxxxxxxxxxxxx' (length=24) 36 => string 'xxxxxxxxxxxxxx' (length=12) 37 => string 'xxxxxxxxxxxxxx' (length=18) 38 => string 'xxxxxxxxxxxxxx' (length=21) 39 => string 'xxxxxxxxxxxxxx' (length=9) 40 => string 'xxxxxxxxxxxxxx' (length=9) 41 => string 'xxxxxxxxxxxxxx' (length=18) 42 => string 'xxxxxxxxxxxxxx' (length=21) 43 => string 'xxxxxxxxxxxxxx' (length=15) 44 => string 'xxxxxxxxxxxxxx' (length=12) 45 => string 'xxxxxxxxxxxxxx' (length=6) 46 => string 'xxxxxxxxxxxxxx' (length=12) 47 => string 'xxxxxxxxxxxxxx' (length=22) 48 => string 'xxxxxxxxxxxxxx' (length=22) 49 => string '' (length=0) 内存占用:207.55 kb; 用时:9.5835480690002
위 내용이 이 글의 전체 내용이기를 바랍니다. 모두의 학습에 도움이 됩니다. 더 많은 관련 내용을 보시려면 PHP 중국어 홈페이지를 주목해주세요!
PHP를 사용하여 간단한 인터프리터를 작성하는 방법
MixPHP를 사용하여 API 인터페이스를 개발하는 방법
위 내용은 PHP를 사용하여 대용량 Excel 파일의 데이터를 읽는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!