本文主要是介绍PHP 读取或生成大的Excel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
场景,在很多情况下,需要读取Excel文件。
常用的有PHPExcel包或者使用 maatwebsite/excel 包
但是使用这个包读取或生成excel,如果excel文件过大,很容易出现超内存情况。
解决方法:
上传:要求上传者使用.csv 文件上传。然后使用php自带的 fgetcsv()函数来读取文件。http://php.net/manual/zh/function.fgetcsv.php
demo:
*** 读取excel* @param string $filename*/public function fgetcsv(){$row = 1;if (($handle = fopen("test.csv", "r")) !== FALSE) {while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {$num = count($data);echo "<p> $num fields in line $row: <br /></p>\n";$row++;for ($c=0; $c < $num; $c++) {echo $data[$c] . "<br />\n";}}fclose($handle);}}
生产csv文件:
*** 告诉浏览器下载csv文件* @param string $filename*/public function download($filename){header("Conten-type:text/csv;charset=utf-8");$list = array (array('aaa', 'bbb', 'ccc', 'dddd'),array('123', '456', '789'),array('"aaa"', '"bbb"'));$fp = fopen('file.csv', 'w');foreach ($list as $fields) {fputcsv($fp, $fields);}fclose($fp);}
实际测试效果,可以导出几百兆的csv格式的Excel、读取的话,没测试,感觉从文件指针中读入一行并解析 CSV 字段这种方式应该也可以读取很大的文件。。
误区Tip:
最开始我获取文件使用file_get_content() 函数,最后有个问题,如果单元格里面如果同时也有逗号,或者引号。当使用逗号去分割每行里面每个单元格,读取的数据就会有错。。。
按照上例子,解决问题!
这篇关于PHP 读取或生成大的Excel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!