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() 函数,最后有个问题,如果单元格里面如果同时也有逗号,或者引号。当使用逗号去分割每行里面每个单元格,读取的数据就会有错。。。
按照上例子,解决问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值