Php 将大型mysql表导出为.xls格式
我需要将mysql表暴露为Php 将大型mysql表导出为.xls格式,php,phpexcel,Php,Phpexcel,我需要将mysql表暴露为.xls格式,这是我代码中的片段 $result = mysql_query( /* here query */ ); $objPHPExcel = new PHPExcel(); $rowNumber = 1; while ($row = mysql_fetch_row($result)) { $col = 'A'; foreach($row as $cell) { $objPHPExc
.xls
格式,这是我代码中的片段
$result = mysql_query( /* here query */ );
$objPHPExcel = new PHPExcel();
$rowNumber = 1;
while ($row = mysql_fetch_row($result)) {
$col = 'A';
foreach($row as $cell) {
$objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell);
$col++;
}
$rowNumber++;
}
问题是,在表中是500000行,而在中,当我在每次迭代中也进行foreach
循环时,这在php文件执行时需要花费很多时间
是否可以优化此代码?这是一个需要注意的问题,而不是对您的问题的直接回答-但是如果您输出的Excel文件格式是.xls
,最大行数将是65536,如果是MS Excel 2007+格式,例如.xlsx
,最大行数将是1048576
因此,如果不将输出格式更改为.xlsx
(这是一种完全不同的结构),文件将太大而无法打开。这是一个需要注意的问题,而不是直接回答您的问题-但是如果您输出的Excel文件格式是.xls
,最大行数为65536,如果是MS Excel 2007+格式,例如.xlsx
,则最大行数为1048576
因此,如果不将输出格式更改为.xlsx
(这是一种完全不同的结构),文件将太大而无法打开。考虑将数据转储到csv文件中,然后将其导入Excel。应该快得多。考虑将数据转储到csv文件中,然后将其导入Excel。应该快得多。如果出现php超时,可以通过在while或for循环中添加以下内容来重置限制:
set_time_limit(300); //whatever seconds you want
如果您通过浏览器运行,则服务器可能超时。我建议您在命令行上运行它以避免这种情况
此外,与nickhar提到的类似,这可能是一个excel问题。我会尝试以csv文件的形式输出。我认为这将允许您输出更多行。如果您得到php超时,您可以通过在while或for循环中添加以下内容来重置限制:
set_time_limit(300); //whatever seconds you want
如果您通过浏览器运行,则服务器可能超时。我建议您在命令行上运行它以避免这种情况
此外,与nickhar提到的类似,这可能是一个excel问题。我会尝试以csv文件的形式输出。我认为这将允许您输出更多的行。500000行总是需要很多时间来写。。。。即使您通过使用工作表的fromArray()方法来摆脱foreach循环来加快速度;而且(正如nichar指出的)xls格式无法处理太多的行,除非将它们拆分到多个工作表中
您可以通过启用单元缓存来降低内存需求(SQLite提供了最佳的内存使用率),但执行500000行仍然需要很长的时间,并且任何这种大小的操作都应该作为批处理/cron作业运行,500000行的写操作总是需要很长的时间。。。。。即使您通过使用工作表的fromArray()方法来摆脱foreach循环来加快速度;而且(正如nichar指出的)xls格式无法处理太多的行,除非将它们拆分到多个工作表中
您可以通过启用单元缓存来减少内存需求(SQLite提供了最佳的内存使用率),但执行500000行仍然需要很长时间,任何这种大小的操作都应该作为批处理/cron作业来运行我很确定,在这之前很久,他就会遇到内存使用问题。@Mchl确实如此。CSV会更好,并且没有行限制。如果他不需要任何格式,那么CSV是比xls好得多的选项,尤其是使用MySQLs SELECT INTO OUTFILE。。。虽然行限制仍然适用,但如果有人试图使用Excel2003或Earlier打开生成的文件,我敢肯定,早在那之前,他就会遇到内存使用问题。@Mchl确实如此。CSV会更好,并且没有行限制。如果他不需要任何格式,那么CSV是比xls好得多的选项,尤其是使用MySQLs SELECT INTO OUTFILE。。。尽管行限制仍然适用于任何人尝试使用Excel2003或更早版本+1打开结果文件,以获得PHP和Excel之间关系的作者知识+1了解PHP和Excel之间关系的作者知识!