Mysql 对.csv和.xlsx数据的内存高效读写

Mysql 对.csv和.xlsx数据的内存高效读写,mysql,excel,csv,Mysql,Excel,Csv,我希望实现对.xlsx/.csv文件的高效读写 我目前正在使用phpExcel,在处理大文件时遇到问题。已知问题 我找到了以下图书馆供阅读: 这似乎会奏效 为了当前写入文件,我创建了一个数组,然后循环该数组以输出文件。这就是它使用大量内存的原因吗?当使用CodeIgniter从mysql数据库获取数据时,在编写csv/xlsx时,最好的方法是什么 这就是我现在所做的: /* added for excel expert */ function excel_export() { $data

我希望实现对.xlsx/.csv文件的高效读写

我目前正在使用phpExcel,在处理大文件时遇到问题。已知问题

我找到了以下图书馆供阅读:

这似乎会奏效

为了当前写入文件,我创建了一个数组,然后循环该数组以输出文件。这就是它使用大量内存的原因吗?当使用CodeIgniter从mysql数据库获取数据时,在编写csv/xlsx时,最好的方法是什么

这就是我现在所做的:

/* added for excel expert */
function excel_export() {
    $data = $this->Customer->get_all($this->Customer->count_all())->result_object();
    $this->load->helper('report');
    $rows = array();

    $header_row = $this->_excel_get_header_row();
    $header_row[] = lang('customers_customer_id');
    $rows[] = $header_row;

    foreach ($data as $r) {
        $row = array(
            $r->first_name,
            $r->last_name,
            $r->email,
            $r->phone_number,
            $r->address_1,
            $r->address_2,
            $r->city,
            $r->state,
            $r->zip,
            $r->country,
            $r->comments,
            $r->account_number,
            $r->taxable ? 'y' : '',
            $r->company_name,
            $r->person_id
        );
        $rows[] = $row;
    }

    $content = array_to_spreadsheet($rows);
    force_download('customers_export.'.($this->config->item('spreadsheet_format') == 'XLSX' ? 'xlsx' : 'csv'), $content);
    exit;
}

function array_to_spreadsheet($arr)
{   
    $CI =& get_instance();

    $objPHPExcel = new PHPExcel();

    //Default all cells to text
    $objPHPExcel->getDefaultStyle()->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);

    for($k = 0;$k < count($arr);$k++)
    {
        for($j = 0;$j < count($arr[$k]); $j++)
        {
            $objPHPExcel->getActiveSheet()->setCellValueExplicitByColumnAndRow($j, $k+1, $arr[$k][$j]);
        }
    }

    if ($CI->config->item('spreadsheet_format') == 'XLSX')
    {
        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);       
    }
    else
    {
        $objWriter = new PHPExcel_Writer_CSV($objPHPExcel);
    }

    ob_start();
    $objWriter->save('php://output');
    $excelOutput = ob_get_clean();

    return $excelOutput;
}

你说的是什么尺寸?100MB?4GB?如果您谈论的是GBs,它显然会很慢,并且存在许多可能的问题,其中之一是您有IO问题。如果在Linux上,您可以尝试ionice。是不是在某一点之后创建速度变慢的问题?1-5 mb是我正在处理的文件大小